{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "异常值检测主要是为了发现数据集中的一些\"与众不同\"的数据值，所谓“与众不同”的数据值是指这些数据与大多数数据存在较大的差异我们称之为“异常值”，并且在现实中这些“异常值”并没有被打上标签，因此我们必须通过某种算法来自动识别出这些异常值。对于异常值我们有如下的定义:\n",
    "\n",
    "异常值所占整体数据的比例较少,产生异常值的概率非常低。\n",
    "异常值本身的特征与其他正常值有明显的差异。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据\n",
    "\n",
    "在本篇博客中我们的数据来自于国外的某个超市的销售数据，你可以在这里下载: https://community.tableau.com/docs/DOC-1236"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import matplotlib\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  \n",
    "plt.rcParams['axes.unicode_minus'] = False \n",
    "from sklearn.ensemble import IsolationForest\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from pyod.models.abod import ABOD\n",
    "from pyod.models.cblof import CBLOF\n",
    "from pyod.models.feature_bagging import FeatureBagging\n",
    "from pyod.models.hbos import HBOS\n",
    "from pyod.models.iforest import IForest\n",
    "from pyod.models.knn import KNN\n",
    "from pyod.models.lof import LOF\n",
    "from scipy import stats\n",
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Row ID</th>\n",
       "      <th>Order ID</th>\n",
       "      <th>Order Date</th>\n",
       "      <th>Ship Date</th>\n",
       "      <th>Ship Mode</th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Customer Name</th>\n",
       "      <th>Segment</th>\n",
       "      <th>Country</th>\n",
       "      <th>City</th>\n",
       "      <th>...</th>\n",
       "      <th>Postal Code</th>\n",
       "      <th>Region</th>\n",
       "      <th>Product ID</th>\n",
       "      <th>Category</th>\n",
       "      <th>Sub-Category</th>\n",
       "      <th>Product Name</th>\n",
       "      <th>Sales</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>CA-2016-152156</td>\n",
       "      <td>2016-11-08</td>\n",
       "      <td>2016-11-11</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>CG-12520</td>\n",
       "      <td>Claire Gute</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Henderson</td>\n",
       "      <td>...</td>\n",
       "      <td>42420</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-BO-10001798</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Bookcases</td>\n",
       "      <td>Bush Somerset Collection Bookcase</td>\n",
       "      <td>261.96</td>\n",
       "      <td>2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>41.9136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>CA-2016-152156</td>\n",
       "      <td>2016-11-08</td>\n",
       "      <td>2016-11-11</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>CG-12520</td>\n",
       "      <td>Claire Gute</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Henderson</td>\n",
       "      <td>...</td>\n",
       "      <td>42420</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-CH-10000454</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Chairs</td>\n",
       "      <td>Hon Deluxe Fabric Upholstered Stacking Chairs,...</td>\n",
       "      <td>731.94</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>219.5820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>CA-2016-138688</td>\n",
       "      <td>2016-06-12</td>\n",
       "      <td>2016-06-16</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>DV-13045</td>\n",
       "      <td>Darrin Van Huff</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>...</td>\n",
       "      <td>90036</td>\n",
       "      <td>West</td>\n",
       "      <td>OFF-LA-10000240</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Labels</td>\n",
       "      <td>Self-Adhesive Address Labels for Typewriters b...</td>\n",
       "      <td>14.62</td>\n",
       "      <td>2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.8714</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Row ID        Order ID Order Date  Ship Date     Ship Mode Customer ID  \\\n",
       "0       1  CA-2016-152156 2016-11-08 2016-11-11  Second Class    CG-12520   \n",
       "1       2  CA-2016-152156 2016-11-08 2016-11-11  Second Class    CG-12520   \n",
       "2       3  CA-2016-138688 2016-06-12 2016-06-16  Second Class    DV-13045   \n",
       "\n",
       "     Customer Name    Segment        Country         City    ...     \\\n",
       "0      Claire Gute   Consumer  United States    Henderson    ...      \n",
       "1      Claire Gute   Consumer  United States    Henderson    ...      \n",
       "2  Darrin Van Huff  Corporate  United States  Los Angeles    ...      \n",
       "\n",
       "  Postal Code  Region       Product ID         Category Sub-Category  \\\n",
       "0       42420   South  FUR-BO-10001798        Furniture    Bookcases   \n",
       "1       42420   South  FUR-CH-10000454        Furniture       Chairs   \n",
       "2       90036    West  OFF-LA-10000240  Office Supplies       Labels   \n",
       "\n",
       "                                        Product Name   Sales  Quantity  \\\n",
       "0                  Bush Somerset Collection Bookcase  261.96         2   \n",
       "1  Hon Deluxe Fabric Upholstered Stacking Chairs,...  731.94         3   \n",
       "2  Self-Adhesive Address Labels for Typewriters b...   14.62         2   \n",
       "\n",
       "   Discount    Profit  \n",
       "0       0.0   41.9136  \n",
       "1       0.0  219.5820  \n",
       "2       0.0    6.8714  \n",
       "\n",
       "[3 rows x 21 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_excel(\"./data/Superstore.xls\")\n",
    "df.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看Sales变量的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "count     9994.000000\n",
      "mean       229.858001\n",
      "std        623.245101\n",
      "min          0.444000\n",
      "25%         17.280000\n",
      "50%         54.490000\n",
      "75%        209.940000\n",
      "max      22638.480000\n",
      "Name: Sales, dtype: float64\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3e814cb38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(df.Sales.describe())\n",
    "# df['Sales'].hist()\n",
    "sns.distplot(df['Sales'])\n",
    "sns.despine()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从分布上看,销售价格明显严重右偏,右侧有长尾,并且我们看到销售价格(sales)的异常区域大致应该分布在上图的红圈范围内。下面我们查看sales的偏度(Skewness)与峰度(Kurtosis)，偏度反应的是分布的偏斜程度,可能是左偏，右偏，长尾等形态，峰度反应分布的形状的胖瘦(宽窄),具体解释请参考这篇博客:\n",
    "https://blog.csdn.net/binbigdata/article/details/79897160\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Skewness: 12.972752\n",
      "Kurtosis: 305.311753\n"
     ]
    }
   ],
   "source": [
    "print(\"Skewness: %f\" % df['Sales'].skew())\n",
    "print(\"Kurtosis: %f\" % df['Sales'].kurt())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看利润(Profit)分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "count    9994.000000\n",
      "mean       28.656896\n",
      "std       234.260108\n",
      "min     -6599.978000\n",
      "25%         1.728750\n",
      "50%         8.666500\n",
      "75%        29.364000\n",
      "max      8399.976000\n",
      "Name: Profit, dtype: float64\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3e7beaeb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(df.Profit.describe())\n",
    "sns.distplot(df['Profit'])\n",
    "plt.title(\"Distribution of Profit\")\n",
    "sns.despine()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图中我们可以发现 Profit分布似乎呈左右对称并且是单峰的形状,均值的左右两侧都有长尾且右侧长尾比左侧长尾更长(右侧最大值是800，左侧最小值是-6000)，因此总体上Profit分布呈现轻微右偏，数据出现在两侧长尾范围内的概率最低,因此异常区域应该处于左右两侧的红圈内。下面我们查看profit的偏度与峰度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Skewness: 7.561432\n",
      "Kurtosis: 397.188515\n"
     ]
    }
   ],
   "source": [
    "print(\"Skewness: %f\" % df['Profit'].skew())\n",
    "print(\"Kurtosis: %f\" % df['Profit'].kurt())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# IsolationForest(隔离森林)\n",
    "\n",
    "IsolationForest是一种简单有效的检测异常值的算法，它可以在数据的分布区域中找出异常值所在的区域，并对所有数据进行评分，那些落在异常区域的数据值会获得较低的分数，而那些不在异常区域中的数据将会获得较高的分数,大家可以参考这篇文章(https://dzone.com/articles/spotting-outliers-with-isolation-forest-using-skle )。在这篇文章中作者随机生成了两个正太分布N(-2,5)和N(2,5),同时通过隔离森林算法找到到了这两个分布中的异常区域,并且生成一条评分曲线,落在异常区域内的数据将会得到低分，落在异常区域内以外的数据将会获得高分:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3df4711d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np \n",
    "import matplotlib.pyplot as plt \n",
    "x = np.concatenate((np.random.normal(loc=-2, scale=.5,size=500), np.random.normal(loc=2, scale=.5, size=500)))\n",
    "\n",
    "isolation_forest = IsolationForest(n_estimators=100) \n",
    "isolation_forest.fit(x.reshape(-1, 1)) \n",
    "xx = np.linspace(-6, 6, 100).reshape(-1,1) \n",
    "anomaly_score = isolation_forest.decision_function(xx) \n",
    "outlier = isolation_forest.predict(xx)\n",
    "\n",
    "plt.figure(figsize=(10,8))\n",
    "plt.subplot(2,1,1)\n",
    "plt.hist(x, normed=True) \n",
    "plt.xlim([-5, 5]) \n",
    "\n",
    "plt.subplot(2,1,2)\n",
    "plt.plot(xx, anomaly_score, label='异常值分数') \n",
    "plt.fill_between(xx.T[0], np.min(anomaly_score), np.max(anomaly_score), where=outlier==-1, color='r', alpha=.4, label='异常值区域') \n",
    "plt.legend() \n",
    "plt.ylabel('异常值分数') \n",
    "plt.xlabel('x') \n",
    "plt.xlim([-5, 5]) \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用隔离森林算法来探测Sales的异常值区域\n",
    "\n",
    "隔离森林是一种检测异常值的算法，使用IsolationForest算法返回每个样本的异常分数，该算法基于这样的思想:异常是少数和在特征上不同的数据点。隔离森林是一种基于树的模型。在这些树中，通过首先随机选择特征然后在所选特征的最小值和最大值之间选择随机分割值来创建分区。下面我们使用隔离森林算法来探测sales的异常区域,并生成评分曲线:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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vnXllSxZupRly5dz6de/TuOyZdzx299y5GGHUT9yJP+cNYu+ffuyevVqbrzlFh569FFWr1nDTbfeSnNLC+efdRaDBg7kgP33555f/IKmxkb67bFH+1Wf9913H0cffXR7DdXV1fTp04cLL7yQlpYWqqqqaGho4Cc/+QlNTU3MnDmTAw44oOu+MwxqhbVm8t4J+3DN/bMZ1NevTZLUyy1YAHvt1XXvN3du4a433Xorjz/5ZPstMDKTfn370tzczIKGBr5xxRV89JxzNllv3EEHcf0vf0n/fv14w+tex2e/9CVeOXYsJxx3HF/+9reZ+/zzVFVVsbSxkYsuuIBBAwdusP4ZH/4wrznySD578cXMmDGDD3zgA/zpT39i+PDhPPnkkzzzzDPcd999vO9972PQoEFUVVXxr3/9i7PPPpuamhr23HPPHf6aNmbiKKg1k3611fSpqWLhstXlLkeSpF5p2JAh7DFqFCced9wmt7yY9P73873LLuO4CRP4wdVXM2/+hjePqIrgwvPPZ/CgQdx4yy089sQT7Dd6NFVVVaxYuZJrv/c9AG675x6WlGYn6Oh/vv99Pnn55UyePJmnn36aG264geHDhwOwePFilixZwrx587jhhhu48847WbVqFRMnTqS1tZVzzjmHP/zhD13+fXiOWkGt2XaPlDXNrfz0/tnMnL+s3CVJktTrjHvVq5h26608N28eH/3AB/j4Bz/IqqYmJr35zdxy7bXsveeeXHzhhVRVVfH5Cy/c4DF82DDec/rpHH7ooRx0wAF8c+rU9vdd1dTEM7Nm8cysWSxsaOj0s/v06cN3vv51Zs2axbJly9hjjz3aXzv22GM5/PDDOf3004kIvvKVrzB69Gh233137rjjDo7sMJNCV3JEraDMpKpDsH9s7kscsPug8hUkSVIv87Mbb+TH111Hv759efDhh/n7U08B8NgTT3Dn734HwAXnncdbTz6ZSz/9aRa9+CJ/evBBGpct45QTTuDSDvN8HnjAAaxctar9+QsLFvDj664DYP7ChZw4cWKnNXz24ot5/etfz7777svxxx/PH/7wB4YNG9b++qpVq2hqauLjH/84CxYs4KyzzuKCCy7g2muv7eqvAzCoFdaabUOq6wzoU72F3pIkaVudedppnHnaacyeM4dPT53K9T/8IQCTzz2Xy6ZMYd/RowG46LLLuO3uuxk+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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3e783fc88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#定义隔离森林\n",
    "isolation_forest = IsolationForest(n_estimators=100)\n",
    "#训练销售价格数据\n",
    "isolation_forest.fit(df['Sales'].values.reshape(-1, 1))\n",
    "#在销售价格的最小值和最大值之间分割数据\n",
    "xx = np.linspace(df['Sales'].min(), df['Sales'].max(), len(df)).reshape(-1,1)\n",
    "#生成所有数据的异常值分数\n",
    "anomaly_score = isolation_forest.decision_function(xx)\n",
    "#预测异常值\n",
    "outlier = isolation_forest.predict(xx)\n",
    "\n",
    "plt.figure(figsize=(10,8))\n",
    "plt.subplot(2,1,1)\n",
    "sns.distplot(df['Sales'])\n",
    "sns.despine()\n",
    "\n",
    "plt.subplot(2,1,2)\n",
    "plt.plot(xx, anomaly_score, label='异常值分数')\n",
    "plt.fill_between(xx.T[0], np.min(anomaly_score), np.max(anomaly_score), \n",
    "                 where=outlier==-1, color='r', \n",
    "                 alpha=.4, label='异常值区域')\n",
    "plt.legend()\n",
    "plt.ylabel('异常值分数')\n",
    "plt.xlabel('销售价格(Sales)')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图中我们发现隔离森林算法很轻松的就识别出了Sales分布的异常区域(粉色矩形),并且生成了评分曲线,当数据落在粉色矩形的区域中时将会得到较低的评分,当数据落在粉色矩形区域以外时将会得到高分。下面是找出所有销售价格为异常值的销售记录。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "销售价格最小异常值: 566.97\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Row ID</th>\n",
       "      <th>Order ID</th>\n",
       "      <th>Order Date</th>\n",
       "      <th>Ship Date</th>\n",
       "      <th>Ship Mode</th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Customer Name</th>\n",
       "      <th>Segment</th>\n",
       "      <th>Country</th>\n",
       "      <th>City</th>\n",
       "      <th>...</th>\n",
       "      <th>Postal Code</th>\n",
       "      <th>Region</th>\n",
       "      <th>Product ID</th>\n",
       "      <th>Category</th>\n",
       "      <th>Sub-Category</th>\n",
       "      <th>Product Name</th>\n",
       "      <th>Sales</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>CA-2016-152156</td>\n",
       "      <td>2016-11-08</td>\n",
       "      <td>2016-11-11</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>CG-12520</td>\n",
       "      <td>Claire Gute</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Henderson</td>\n",
       "      <td>...</td>\n",
       "      <td>42420</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-CH-10000454</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Chairs</td>\n",
       "      <td>Hon Deluxe Fabric Upholstered Stacking Chairs,...</td>\n",
       "      <td>731.9400</td>\n",
       "      <td>3</td>\n",
       "      <td>0.00</td>\n",
       "      <td>219.5820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>US-2015-108966</td>\n",
       "      <td>2015-10-11</td>\n",
       "      <td>2015-10-18</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>SO-20335</td>\n",
       "      <td>Sean O'Donnell</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Fort Lauderdale</td>\n",
       "      <td>...</td>\n",
       "      <td>33311</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-TA-10000577</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Bretford CR4500 Series Slim Rectangular Table</td>\n",
       "      <td>957.5775</td>\n",
       "      <td>5</td>\n",
       "      <td>0.45</td>\n",
       "      <td>-383.0310</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>CA-2014-115812</td>\n",
       "      <td>2014-06-09</td>\n",
       "      <td>2014-06-14</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>BH-11710</td>\n",
       "      <td>Brosina Hoffman</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>...</td>\n",
       "      <td>90032</td>\n",
       "      <td>West</td>\n",
       "      <td>TEC-PH-10002275</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Phones</td>\n",
       "      <td>Mitel 5320 IP Phone VoIP phone</td>\n",
       "      <td>907.1520</td>\n",
       "      <td>6</td>\n",
       "      <td>0.20</td>\n",
       "      <td>90.7152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>CA-2014-115812</td>\n",
       "      <td>2014-06-09</td>\n",
       "      <td>2014-06-14</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>BH-11710</td>\n",
       "      <td>Brosina Hoffman</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>...</td>\n",
       "      <td>90032</td>\n",
       "      <td>West</td>\n",
       "      <td>FUR-TA-10001539</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Chromcraft Rectangular Conference Tables</td>\n",
       "      <td>1706.1840</td>\n",
       "      <td>9</td>\n",
       "      <td>0.20</td>\n",
       "      <td>85.3092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>CA-2014-115812</td>\n",
       "      <td>2014-06-09</td>\n",
       "      <td>2014-06-14</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>BH-11710</td>\n",
       "      <td>Brosina Hoffman</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>...</td>\n",
       "      <td>90032</td>\n",
       "      <td>West</td>\n",
       "      <td>TEC-PH-10002033</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Phones</td>\n",
       "      <td>Konftel 250 Conference phone - Charcoal black</td>\n",
       "      <td>911.4240</td>\n",
       "      <td>4</td>\n",
       "      <td>0.20</td>\n",
       "      <td>68.3568</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>17</td>\n",
       "      <td>CA-2014-105893</td>\n",
       "      <td>2014-11-11</td>\n",
       "      <td>2014-11-18</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>PK-19075</td>\n",
       "      <td>Pete Kriz</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Madison</td>\n",
       "      <td>...</td>\n",
       "      <td>53711</td>\n",
       "      <td>Central</td>\n",
       "      <td>OFF-ST-10004186</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Storage</td>\n",
       "      <td>Stur-D-Stor Shelving, Vertical 5-Shelf: 72\"H x...</td>\n",
       "      <td>665.8800</td>\n",
       "      <td>6</td>\n",
       "      <td>0.00</td>\n",
       "      <td>13.3176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>25</td>\n",
       "      <td>CA-2015-106320</td>\n",
       "      <td>2015-09-25</td>\n",
       "      <td>2015-09-30</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>EB-13870</td>\n",
       "      <td>Emily Burns</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Orem</td>\n",
       "      <td>...</td>\n",
       "      <td>84057</td>\n",
       "      <td>West</td>\n",
       "      <td>FUR-TA-10000577</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Bretford CR4500 Series Slim Rectangular Table</td>\n",
       "      <td>1044.6300</td>\n",
       "      <td>3</td>\n",
       "      <td>0.00</td>\n",
       "      <td>240.2649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>US-2015-150630</td>\n",
       "      <td>2015-09-17</td>\n",
       "      <td>2015-09-21</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>TB-21520</td>\n",
       "      <td>Tracy Blumstein</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Philadelphia</td>\n",
       "      <td>...</td>\n",
       "      <td>19140</td>\n",
       "      <td>East</td>\n",
       "      <td>FUR-BO-10004834</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Bookcases</td>\n",
       "      <td>Riverside Palais Royal Lawyers Bookcase, Royal...</td>\n",
       "      <td>3083.4300</td>\n",
       "      <td>7</td>\n",
       "      <td>0.50</td>\n",
       "      <td>-1665.0522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>36</td>\n",
       "      <td>CA-2016-117590</td>\n",
       "      <td>2016-12-08</td>\n",
       "      <td>2016-12-10</td>\n",
       "      <td>First Class</td>\n",
       "      <td>GH-14485</td>\n",
       "      <td>Gene Hale</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>Richardson</td>\n",
       "      <td>...</td>\n",
       "      <td>75080</td>\n",
       "      <td>Central</td>\n",
       "      <td>TEC-PH-10004977</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Phones</td>\n",
       "      <td>GE 30524EE4</td>\n",
       "      <td>1097.5440</td>\n",
       "      <td>7</td>\n",
       "      <td>0.20</td>\n",
       "      <td>123.4737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>55</td>\n",
       "      <td>CA-2016-105816</td>\n",
       "      <td>2016-12-11</td>\n",
       "      <td>2016-12-17</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>JM-15265</td>\n",
       "      <td>Janet Molinari</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>New York City</td>\n",
       "      <td>...</td>\n",
       "      <td>10024</td>\n",
       "      <td>East</td>\n",
       "      <td>TEC-PH-10002447</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Phones</td>\n",
       "      <td>AT&amp;T CL83451 4-Handset Telephone</td>\n",
       "      <td>1029.9500</td>\n",
       "      <td>5</td>\n",
       "      <td>0.00</td>\n",
       "      <td>298.6855</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>10 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Row ID        Order ID Order Date  Ship Date       Ship Mode Customer ID  \\\n",
       "1        2  CA-2016-152156 2016-11-08 2016-11-11    Second Class    CG-12520   \n",
       "3        4  US-2015-108966 2015-10-11 2015-10-18  Standard Class    SO-20335   \n",
       "7        8  CA-2014-115812 2014-06-09 2014-06-14  Standard Class    BH-11710   \n",
       "10      11  CA-2014-115812 2014-06-09 2014-06-14  Standard Class    BH-11710   \n",
       "11      12  CA-2014-115812 2014-06-09 2014-06-14  Standard Class    BH-11710   \n",
       "16      17  CA-2014-105893 2014-11-11 2014-11-18  Standard Class    PK-19075   \n",
       "24      25  CA-2015-106320 2015-09-25 2015-09-30  Standard Class    EB-13870   \n",
       "27      28  US-2015-150630 2015-09-17 2015-09-21  Standard Class    TB-21520   \n",
       "35      36  CA-2016-117590 2016-12-08 2016-12-10     First Class    GH-14485   \n",
       "54      55  CA-2016-105816 2016-12-11 2016-12-17  Standard Class    JM-15265   \n",
       "\n",
       "      Customer Name    Segment        Country             City    ...      \\\n",
       "1       Claire Gute   Consumer  United States        Henderson    ...       \n",
       "3    Sean O'Donnell   Consumer  United States  Fort Lauderdale    ...       \n",
       "7   Brosina Hoffman   Consumer  United States      Los Angeles    ...       \n",
       "10  Brosina Hoffman   Consumer  United States      Los Angeles    ...       \n",
       "11  Brosina Hoffman   Consumer  United States      Los Angeles    ...       \n",
       "16        Pete Kriz   Consumer  United States          Madison    ...       \n",
       "24      Emily Burns   Consumer  United States             Orem    ...       \n",
       "27  Tracy Blumstein   Consumer  United States     Philadelphia    ...       \n",
       "35        Gene Hale  Corporate  United States       Richardson    ...       \n",
       "54   Janet Molinari  Corporate  United States    New York City    ...       \n",
       "\n",
       "   Postal Code   Region       Product ID         Category Sub-Category  \\\n",
       "1        42420    South  FUR-CH-10000454        Furniture       Chairs   \n",
       "3        33311    South  FUR-TA-10000577        Furniture       Tables   \n",
       "7        90032     West  TEC-PH-10002275       Technology       Phones   \n",
       "10       90032     West  FUR-TA-10001539        Furniture       Tables   \n",
       "11       90032     West  TEC-PH-10002033       Technology       Phones   \n",
       "16       53711  Central  OFF-ST-10004186  Office Supplies      Storage   \n",
       "24       84057     West  FUR-TA-10000577        Furniture       Tables   \n",
       "27       19140     East  FUR-BO-10004834        Furniture    Bookcases   \n",
       "35       75080  Central  TEC-PH-10004977       Technology       Phones   \n",
       "54       10024     East  TEC-PH-10002447       Technology       Phones   \n",
       "\n",
       "                                         Product Name      Sales  Quantity  \\\n",
       "1   Hon Deluxe Fabric Upholstered Stacking Chairs,...   731.9400         3   \n",
       "3       Bretford CR4500 Series Slim Rectangular Table   957.5775         5   \n",
       "7                      Mitel 5320 IP Phone VoIP phone   907.1520         6   \n",
       "10           Chromcraft Rectangular Conference Tables  1706.1840         9   \n",
       "11      Konftel 250 Conference phone - Charcoal black   911.4240         4   \n",
       "16  Stur-D-Stor Shelving, Vertical 5-Shelf: 72\"H x...   665.8800         6   \n",
       "24      Bretford CR4500 Series Slim Rectangular Table  1044.6300         3   \n",
       "27  Riverside Palais Royal Lawyers Bookcase, Royal...  3083.4300         7   \n",
       "35                                        GE 30524EE4  1097.5440         7   \n",
       "54                   AT&T CL83451 4-Handset Telephone  1029.9500         5   \n",
       "\n",
       "    Discount     Profit  \n",
       "1       0.00   219.5820  \n",
       "3       0.45  -383.0310  \n",
       "7       0.20    90.7152  \n",
       "10      0.20    85.3092  \n",
       "11      0.20    68.3568  \n",
       "16      0.00    13.3176  \n",
       "24      0.00   240.2649  \n",
       "27      0.50 -1665.0522  \n",
       "35      0.20   123.4737  \n",
       "54      0.00   298.6855  \n",
       "\n",
       "[10 rows x 21 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print('销售价格最小异常值:',df[df.Sales>=xx[outlier==-1].min()].Sales.min())\n",
    "df[df.Sales>=xx[outlier==-1].min()].head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用隔离森林算法来探测Profit的异常值区域\n",
    "\n",
    "下面我们使用隔离森林算法来探测Profit的异常区域,并生成评分曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc4283a57f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#定义隔离森林\n",
    "isolation_forest = IsolationForest(n_estimators=100)\n",
    "#训练销利润数据\n",
    "isolation_forest.fit(df['Profit'].values.reshape(-1, 1))\n",
    "xx = np.linspace(df['Profit'].min(), df['Profit'].max(), len(df)).reshape(-1,1)\n",
    "#生成所有数据的异常值分数\n",
    "anomaly_score = isolation_forest.decision_function(xx)\n",
    "#预测异常值\n",
    "outlier = isolation_forest.predict(xx)\n",
    "\n",
    "plt.figure(figsize=(10,8))\n",
    "plt.subplot(2,1,1)\n",
    "sns.distplot(df['Profit'])\n",
    "sns.despine()\n",
    "\n",
    "plt.subplot(2,1,2)\n",
    "plt.plot(xx, anomaly_score, label='异常值分数')\n",
    "plt.fill_between(xx.T[0], np.min(anomaly_score), np.max(anomaly_score), \n",
    "                 where=outlier==-1, color='r', \n",
    "                 alpha=.4, label='异常值区域')\n",
    "plt.legend()\n",
    "plt.ylabel('异常值分数')\n",
    "plt.xlabel('利润(Profit)')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在上图中隔离森林算法轻松的探测出来了Profit分布左右两侧的异常值区域，并生成了评分曲线。当数据落在左右两侧的分数矩形范围内时将会得到较低的分数,而当数据落在粉色矩形框的范围之外将会得到较高的分数。下面我们查看右两侧异常值的最小值,和左侧异常值的最大值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "右侧最小异常值为： 152.02319999999997\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Row ID</th>\n",
       "      <th>Order ID</th>\n",
       "      <th>Order Date</th>\n",
       "      <th>Ship Date</th>\n",
       "      <th>Ship Mode</th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Customer Name</th>\n",
       "      <th>Segment</th>\n",
       "      <th>Country</th>\n",
       "      <th>City</th>\n",
       "      <th>...</th>\n",
       "      <th>Postal Code</th>\n",
       "      <th>Region</th>\n",
       "      <th>Product ID</th>\n",
       "      <th>Category</th>\n",
       "      <th>Sub-Category</th>\n",
       "      <th>Product Name</th>\n",
       "      <th>Sales</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>CA-2016-152156</td>\n",
       "      <td>2016-11-08</td>\n",
       "      <td>2016-11-11</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>CG-12520</td>\n",
       "      <td>Claire Gute</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Henderson</td>\n",
       "      <td>...</td>\n",
       "      <td>42420</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-CH-10000454</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Chairs</td>\n",
       "      <td>Hon Deluxe Fabric Upholstered Stacking Chairs,...</td>\n",
       "      <td>731.94</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>219.5820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>25</td>\n",
       "      <td>CA-2015-106320</td>\n",
       "      <td>2015-09-25</td>\n",
       "      <td>2015-09-30</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>EB-13870</td>\n",
       "      <td>Emily Burns</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Orem</td>\n",
       "      <td>...</td>\n",
       "      <td>84057</td>\n",
       "      <td>West</td>\n",
       "      <td>FUR-TA-10000577</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Bretford CR4500 Series Slim Rectangular Table</td>\n",
       "      <td>1044.63</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>240.2649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>55</td>\n",
       "      <td>CA-2016-105816</td>\n",
       "      <td>2016-12-11</td>\n",
       "      <td>2016-12-17</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>JM-15265</td>\n",
       "      <td>Janet Molinari</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>New York City</td>\n",
       "      <td>...</td>\n",
       "      <td>10024</td>\n",
       "      <td>East</td>\n",
       "      <td>TEC-PH-10002447</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Phones</td>\n",
       "      <td>AT&amp;T CL83451 4-Handset Telephone</td>\n",
       "      <td>1029.95</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>298.6855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>118</td>\n",
       "      <td>CA-2015-110457</td>\n",
       "      <td>2015-03-02</td>\n",
       "      <td>2015-03-06</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>DK-13090</td>\n",
       "      <td>Dave Kipp</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Seattle</td>\n",
       "      <td>...</td>\n",
       "      <td>98103</td>\n",
       "      <td>West</td>\n",
       "      <td>FUR-TA-10001768</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Hon Racetrack Conference Tables</td>\n",
       "      <td>787.53</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>165.3813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>145</td>\n",
       "      <td>CA-2017-155376</td>\n",
       "      <td>2017-12-22</td>\n",
       "      <td>2017-12-27</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>SG-20080</td>\n",
       "      <td>Sandra Glassco</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Independence</td>\n",
       "      <td>...</td>\n",
       "      <td>64055</td>\n",
       "      <td>Central</td>\n",
       "      <td>OFF-AP-10001058</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Appliances</td>\n",
       "      <td>Sanyo 2.5 Cubic Foot Mid-Size Office Refrigera...</td>\n",
       "      <td>839.43</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>218.2518</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>150</td>\n",
       "      <td>CA-2016-114489</td>\n",
       "      <td>2016-12-05</td>\n",
       "      <td>2016-12-09</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>JE-16165</td>\n",
       "      <td>Justin Ellison</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>Franklin</td>\n",
       "      <td>...</td>\n",
       "      <td>53132</td>\n",
       "      <td>Central</td>\n",
       "      <td>FUR-CH-10000454</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Chairs</td>\n",
       "      <td>Hon Deluxe Fabric Upholstered Stacking Chairs,...</td>\n",
       "      <td>1951.84</td>\n",
       "      <td>8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>585.5520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>160</td>\n",
       "      <td>CA-2016-114104</td>\n",
       "      <td>2016-11-20</td>\n",
       "      <td>2016-11-24</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>NP-18670</td>\n",
       "      <td>Nora Paige</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Edmond</td>\n",
       "      <td>...</td>\n",
       "      <td>73034</td>\n",
       "      <td>Central</td>\n",
       "      <td>TEC-PH-10004536</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Phones</td>\n",
       "      <td>Avaya 5420 Digital phone</td>\n",
       "      <td>944.93</td>\n",
       "      <td>7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>236.2325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>245</td>\n",
       "      <td>CA-2014-131926</td>\n",
       "      <td>2014-06-01</td>\n",
       "      <td>2014-06-06</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>DW-13480</td>\n",
       "      <td>Dianna Wilson</td>\n",
       "      <td>Home Office</td>\n",
       "      <td>United States</td>\n",
       "      <td>Lakeville</td>\n",
       "      <td>...</td>\n",
       "      <td>55044</td>\n",
       "      <td>Central</td>\n",
       "      <td>FUR-CH-10004063</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Chairs</td>\n",
       "      <td>Global Deluxe High-Back Manager's Chair</td>\n",
       "      <td>2001.86</td>\n",
       "      <td>7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>580.5394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>247</th>\n",
       "      <td>248</td>\n",
       "      <td>CA-2014-131926</td>\n",
       "      <td>2014-06-01</td>\n",
       "      <td>2014-06-06</td>\n",
       "      <td>Second Class</td>\n",
       "      <td>DW-13480</td>\n",
       "      <td>Dianna Wilson</td>\n",
       "      <td>Home Office</td>\n",
       "      <td>United States</td>\n",
       "      <td>Lakeville</td>\n",
       "      <td>...</td>\n",
       "      <td>55044</td>\n",
       "      <td>Central</td>\n",
       "      <td>OFF-AP-10002945</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Appliances</td>\n",
       "      <td>Honeywell Enviracaire Portable HEPA Air Cleane...</td>\n",
       "      <td>1503.25</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>496.0725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>251</th>\n",
       "      <td>252</td>\n",
       "      <td>CA-2016-145625</td>\n",
       "      <td>2016-09-11</td>\n",
       "      <td>2016-09-17</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>KC-16540</td>\n",
       "      <td>Kelly Collister</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>San Diego</td>\n",
       "      <td>...</td>\n",
       "      <td>92037</td>\n",
       "      <td>West</td>\n",
       "      <td>TEC-AC-10003832</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Accessories</td>\n",
       "      <td>Logitech P710e Mobile Speakerphone</td>\n",
       "      <td>3347.37</td>\n",
       "      <td>13</td>\n",
       "      <td>0.0</td>\n",
       "      <td>636.0003</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>10 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Row ID        Order ID Order Date  Ship Date       Ship Mode Customer ID  \\\n",
       "1         2  CA-2016-152156 2016-11-08 2016-11-11    Second Class    CG-12520   \n",
       "24       25  CA-2015-106320 2015-09-25 2015-09-30  Standard Class    EB-13870   \n",
       "54       55  CA-2016-105816 2016-12-11 2016-12-17  Standard Class    JM-15265   \n",
       "117     118  CA-2015-110457 2015-03-02 2015-03-06  Standard Class    DK-13090   \n",
       "144     145  CA-2017-155376 2017-12-22 2017-12-27  Standard Class    SG-20080   \n",
       "149     150  CA-2016-114489 2016-12-05 2016-12-09  Standard Class    JE-16165   \n",
       "159     160  CA-2016-114104 2016-11-20 2016-11-24  Standard Class    NP-18670   \n",
       "244     245  CA-2014-131926 2014-06-01 2014-06-06    Second Class    DW-13480   \n",
       "247     248  CA-2014-131926 2014-06-01 2014-06-06    Second Class    DW-13480   \n",
       "251     252  CA-2016-145625 2016-09-11 2016-09-17  Standard Class    KC-16540   \n",
       "\n",
       "       Customer Name      Segment        Country           City    ...     \\\n",
       "1        Claire Gute     Consumer  United States      Henderson    ...      \n",
       "24       Emily Burns     Consumer  United States           Orem    ...      \n",
       "54    Janet Molinari    Corporate  United States  New York City    ...      \n",
       "117        Dave Kipp     Consumer  United States        Seattle    ...      \n",
       "144   Sandra Glassco     Consumer  United States   Independence    ...      \n",
       "149   Justin Ellison    Corporate  United States       Franklin    ...      \n",
       "159       Nora Paige     Consumer  United States         Edmond    ...      \n",
       "244    Dianna Wilson  Home Office  United States      Lakeville    ...      \n",
       "247    Dianna Wilson  Home Office  United States      Lakeville    ...      \n",
       "251  Kelly Collister     Consumer  United States      San Diego    ...      \n",
       "\n",
       "    Postal Code   Region       Product ID         Category Sub-Category  \\\n",
       "1         42420    South  FUR-CH-10000454        Furniture       Chairs   \n",
       "24        84057     West  FUR-TA-10000577        Furniture       Tables   \n",
       "54        10024     East  TEC-PH-10002447       Technology       Phones   \n",
       "117       98103     West  FUR-TA-10001768        Furniture       Tables   \n",
       "144       64055  Central  OFF-AP-10001058  Office Supplies   Appliances   \n",
       "149       53132  Central  FUR-CH-10000454        Furniture       Chairs   \n",
       "159       73034  Central  TEC-PH-10004536       Technology       Phones   \n",
       "244       55044  Central  FUR-CH-10004063        Furniture       Chairs   \n",
       "247       55044  Central  OFF-AP-10002945  Office Supplies   Appliances   \n",
       "251       92037     West  TEC-AC-10003832       Technology  Accessories   \n",
       "\n",
       "                                          Product Name    Sales  Quantity  \\\n",
       "1    Hon Deluxe Fabric Upholstered Stacking Chairs,...   731.94         3   \n",
       "24       Bretford CR4500 Series Slim Rectangular Table  1044.63         3   \n",
       "54                    AT&T CL83451 4-Handset Telephone  1029.95         5   \n",
       "117                    Hon Racetrack Conference Tables   787.53         3   \n",
       "144  Sanyo 2.5 Cubic Foot Mid-Size Office Refrigera...   839.43         3   \n",
       "149  Hon Deluxe Fabric Upholstered Stacking Chairs,...  1951.84         8   \n",
       "159                           Avaya 5420 Digital phone   944.93         7   \n",
       "244            Global Deluxe High-Back Manager's Chair  2001.86         7   \n",
       "247  Honeywell Enviracaire Portable HEPA Air Cleane...  1503.25         5   \n",
       "251                 Logitech P710e Mobile Speakerphone  3347.37        13   \n",
       "\n",
       "     Discount    Profit  \n",
       "1         0.0  219.5820  \n",
       "24        0.0  240.2649  \n",
       "54        0.0  298.6855  \n",
       "117       0.0  165.3813  \n",
       "144       0.0  218.2518  \n",
       "149       0.0  585.5520  \n",
       "159       0.0  236.2325  \n",
       "244       0.0  580.5394  \n",
       "247       0.0  496.0725  \n",
       "251       0.0  636.0003  \n",
       "\n",
       "[10 rows x 21 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1=xx[outlier==-1]\n",
    "right_min=x1[x1>0].min()\n",
    "left_max = x1[x1<0].max()\n",
    "print('右侧最小异常值为：',df[df.Profit>=right_min].Profit.min())\n",
    "df[df.Profit>right_min].head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "左侧侧最大异常值为： -67.5435\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Row ID</th>\n",
       "      <th>Order ID</th>\n",
       "      <th>Order Date</th>\n",
       "      <th>Ship Date</th>\n",
       "      <th>Ship Mode</th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Customer Name</th>\n",
       "      <th>Segment</th>\n",
       "      <th>Country</th>\n",
       "      <th>City</th>\n",
       "      <th>...</th>\n",
       "      <th>Postal Code</th>\n",
       "      <th>Region</th>\n",
       "      <th>Product ID</th>\n",
       "      <th>Category</th>\n",
       "      <th>Sub-Category</th>\n",
       "      <th>Product Name</th>\n",
       "      <th>Sales</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>US-2015-108966</td>\n",
       "      <td>2015-10-11</td>\n",
       "      <td>2015-10-18</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>SO-20335</td>\n",
       "      <td>Sean O'Donnell</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Fort Lauderdale</td>\n",
       "      <td>...</td>\n",
       "      <td>33311</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-TA-10000577</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Bretford CR4500 Series Slim Rectangular Table</td>\n",
       "      <td>957.5775</td>\n",
       "      <td>5</td>\n",
       "      <td>0.45</td>\n",
       "      <td>-383.0310</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>15</td>\n",
       "      <td>US-2015-118983</td>\n",
       "      <td>2015-11-22</td>\n",
       "      <td>2015-11-26</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>HP-14815</td>\n",
       "      <td>Harold Pawlan</td>\n",
       "      <td>Home Office</td>\n",
       "      <td>United States</td>\n",
       "      <td>Fort Worth</td>\n",
       "      <td>...</td>\n",
       "      <td>76106</td>\n",
       "      <td>Central</td>\n",
       "      <td>OFF-AP-10002311</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Appliances</td>\n",
       "      <td>Holmes Replacement Filter for HEPA Air Cleaner...</td>\n",
       "      <td>68.8100</td>\n",
       "      <td>5</td>\n",
       "      <td>0.80</td>\n",
       "      <td>-123.8580</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>US-2015-150630</td>\n",
       "      <td>2015-09-17</td>\n",
       "      <td>2015-09-21</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>TB-21520</td>\n",
       "      <td>Tracy Blumstein</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Philadelphia</td>\n",
       "      <td>...</td>\n",
       "      <td>19140</td>\n",
       "      <td>East</td>\n",
       "      <td>FUR-BO-10004834</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Bookcases</td>\n",
       "      <td>Riverside Palais Royal Lawyers Bookcase, Royal...</td>\n",
       "      <td>3083.4300</td>\n",
       "      <td>7</td>\n",
       "      <td>0.50</td>\n",
       "      <td>-1665.0522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>37</td>\n",
       "      <td>CA-2016-117590</td>\n",
       "      <td>2016-12-08</td>\n",
       "      <td>2016-12-10</td>\n",
       "      <td>First Class</td>\n",
       "      <td>GH-14485</td>\n",
       "      <td>Gene Hale</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>Richardson</td>\n",
       "      <td>...</td>\n",
       "      <td>75080</td>\n",
       "      <td>Central</td>\n",
       "      <td>FUR-FU-10003664</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Furnishings</td>\n",
       "      <td>Electrix Architect's Clamp-On Swing Arm Lamp, ...</td>\n",
       "      <td>190.9200</td>\n",
       "      <td>5</td>\n",
       "      <td>0.60</td>\n",
       "      <td>-147.9630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>73</td>\n",
       "      <td>US-2015-134026</td>\n",
       "      <td>2015-04-26</td>\n",
       "      <td>2015-05-02</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>JE-15745</td>\n",
       "      <td>Joel Eaton</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Memphis</td>\n",
       "      <td>...</td>\n",
       "      <td>38109</td>\n",
       "      <td>South</td>\n",
       "      <td>FUR-CH-10000513</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Chairs</td>\n",
       "      <td>High-Back Leather Manager's Chair</td>\n",
       "      <td>831.9360</td>\n",
       "      <td>8</td>\n",
       "      <td>0.20</td>\n",
       "      <td>-114.3912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>119</td>\n",
       "      <td>US-2015-136476</td>\n",
       "      <td>2015-04-05</td>\n",
       "      <td>2015-04-10</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>GG-14650</td>\n",
       "      <td>Greg Guthrie</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>Bristol</td>\n",
       "      <td>...</td>\n",
       "      <td>37620</td>\n",
       "      <td>South</td>\n",
       "      <td>OFF-BI-10003650</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Binders</td>\n",
       "      <td>GBC DocuBind 300 Electric Binding Machine</td>\n",
       "      <td>157.7940</td>\n",
       "      <td>1</td>\n",
       "      <td>0.70</td>\n",
       "      <td>-115.7156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>126</td>\n",
       "      <td>US-2014-134614</td>\n",
       "      <td>2014-09-20</td>\n",
       "      <td>2014-09-25</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>PF-19165</td>\n",
       "      <td>Philip Fox</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>Bloomington</td>\n",
       "      <td>...</td>\n",
       "      <td>61701</td>\n",
       "      <td>Central</td>\n",
       "      <td>FUR-TA-10004534</td>\n",
       "      <td>Furniture</td>\n",
       "      <td>Tables</td>\n",
       "      <td>Bevis 44 x 96 Conference Tables</td>\n",
       "      <td>617.7000</td>\n",
       "      <td>6</td>\n",
       "      <td>0.50</td>\n",
       "      <td>-407.6820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>165</th>\n",
       "      <td>166</td>\n",
       "      <td>CA-2014-139892</td>\n",
       "      <td>2014-09-08</td>\n",
       "      <td>2014-09-12</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>BM-11140</td>\n",
       "      <td>Becky Martin</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>San Antonio</td>\n",
       "      <td>...</td>\n",
       "      <td>78207</td>\n",
       "      <td>Central</td>\n",
       "      <td>TEC-MA-10000822</td>\n",
       "      <td>Technology</td>\n",
       "      <td>Machines</td>\n",
       "      <td>Lexmark MX611dhe Monochrome Laser Printer</td>\n",
       "      <td>8159.9520</td>\n",
       "      <td>8</td>\n",
       "      <td>0.40</td>\n",
       "      <td>-1359.9920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>169</th>\n",
       "      <td>170</td>\n",
       "      <td>CA-2014-139892</td>\n",
       "      <td>2014-09-08</td>\n",
       "      <td>2014-09-12</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>BM-11140</td>\n",
       "      <td>Becky Martin</td>\n",
       "      <td>Consumer</td>\n",
       "      <td>United States</td>\n",
       "      <td>San Antonio</td>\n",
       "      <td>...</td>\n",
       "      <td>78207</td>\n",
       "      <td>Central</td>\n",
       "      <td>OFF-AP-10002518</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Appliances</td>\n",
       "      <td>Kensington 7 Outlet MasterPiece Power Center</td>\n",
       "      <td>177.9800</td>\n",
       "      <td>5</td>\n",
       "      <td>0.80</td>\n",
       "      <td>-453.8490</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>175</td>\n",
       "      <td>US-2014-100853</td>\n",
       "      <td>2014-09-14</td>\n",
       "      <td>2014-09-19</td>\n",
       "      <td>Standard Class</td>\n",
       "      <td>JB-15400</td>\n",
       "      <td>Jennifer Braxton</td>\n",
       "      <td>Corporate</td>\n",
       "      <td>United States</td>\n",
       "      <td>Chicago</td>\n",
       "      <td>...</td>\n",
       "      <td>60623</td>\n",
       "      <td>Central</td>\n",
       "      <td>OFF-AP-10000891</td>\n",
       "      <td>Office Supplies</td>\n",
       "      <td>Appliances</td>\n",
       "      <td>Kensington 7 Outlet MasterPiece HOMEOFFICE Pow...</td>\n",
       "      <td>52.4480</td>\n",
       "      <td>2</td>\n",
       "      <td>0.80</td>\n",
       "      <td>-131.1200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>10 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Row ID        Order ID Order Date  Ship Date       Ship Mode Customer ID  \\\n",
       "3         4  US-2015-108966 2015-10-11 2015-10-18  Standard Class    SO-20335   \n",
       "14       15  US-2015-118983 2015-11-22 2015-11-26  Standard Class    HP-14815   \n",
       "27       28  US-2015-150630 2015-09-17 2015-09-21  Standard Class    TB-21520   \n",
       "36       37  CA-2016-117590 2016-12-08 2016-12-10     First Class    GH-14485   \n",
       "72       73  US-2015-134026 2015-04-26 2015-05-02  Standard Class    JE-15745   \n",
       "118     119  US-2015-136476 2015-04-05 2015-04-10  Standard Class    GG-14650   \n",
       "125     126  US-2014-134614 2014-09-20 2014-09-25  Standard Class    PF-19165   \n",
       "165     166  CA-2014-139892 2014-09-08 2014-09-12  Standard Class    BM-11140   \n",
       "169     170  CA-2014-139892 2014-09-08 2014-09-12  Standard Class    BM-11140   \n",
       "174     175  US-2014-100853 2014-09-14 2014-09-19  Standard Class    JB-15400   \n",
       "\n",
       "        Customer Name      Segment        Country             City    ...      \\\n",
       "3      Sean O'Donnell     Consumer  United States  Fort Lauderdale    ...       \n",
       "14      Harold Pawlan  Home Office  United States       Fort Worth    ...       \n",
       "27    Tracy Blumstein     Consumer  United States     Philadelphia    ...       \n",
       "36          Gene Hale    Corporate  United States       Richardson    ...       \n",
       "72         Joel Eaton     Consumer  United States          Memphis    ...       \n",
       "118      Greg Guthrie    Corporate  United States          Bristol    ...       \n",
       "125        Philip Fox     Consumer  United States      Bloomington    ...       \n",
       "165      Becky Martin     Consumer  United States      San Antonio    ...       \n",
       "169      Becky Martin     Consumer  United States      San Antonio    ...       \n",
       "174  Jennifer Braxton    Corporate  United States          Chicago    ...       \n",
       "\n",
       "    Postal Code   Region       Product ID         Category Sub-Category  \\\n",
       "3         33311    South  FUR-TA-10000577        Furniture       Tables   \n",
       "14        76106  Central  OFF-AP-10002311  Office Supplies   Appliances   \n",
       "27        19140     East  FUR-BO-10004834        Furniture    Bookcases   \n",
       "36        75080  Central  FUR-FU-10003664        Furniture  Furnishings   \n",
       "72        38109    South  FUR-CH-10000513        Furniture       Chairs   \n",
       "118       37620    South  OFF-BI-10003650  Office Supplies      Binders   \n",
       "125       61701  Central  FUR-TA-10004534        Furniture       Tables   \n",
       "165       78207  Central  TEC-MA-10000822       Technology     Machines   \n",
       "169       78207  Central  OFF-AP-10002518  Office Supplies   Appliances   \n",
       "174       60623  Central  OFF-AP-10000891  Office Supplies   Appliances   \n",
       "\n",
       "                                          Product Name      Sales  Quantity  \\\n",
       "3        Bretford CR4500 Series Slim Rectangular Table   957.5775         5   \n",
       "14   Holmes Replacement Filter for HEPA Air Cleaner...    68.8100         5   \n",
       "27   Riverside Palais Royal Lawyers Bookcase, Royal...  3083.4300         7   \n",
       "36   Electrix Architect's Clamp-On Swing Arm Lamp, ...   190.9200         5   \n",
       "72                   High-Back Leather Manager's Chair   831.9360         8   \n",
       "118          GBC DocuBind 300 Electric Binding Machine   157.7940         1   \n",
       "125                    Bevis 44 x 96 Conference Tables   617.7000         6   \n",
       "165          Lexmark MX611dhe Monochrome Laser Printer  8159.9520         8   \n",
       "169       Kensington 7 Outlet MasterPiece Power Center   177.9800         5   \n",
       "174  Kensington 7 Outlet MasterPiece HOMEOFFICE Pow...    52.4480         2   \n",
       "\n",
       "     Discount     Profit  \n",
       "3        0.45  -383.0310  \n",
       "14       0.80  -123.8580  \n",
       "27       0.50 -1665.0522  \n",
       "36       0.60  -147.9630  \n",
       "72       0.20  -114.3912  \n",
       "118      0.70  -115.7156  \n",
       "125      0.50  -407.6820  \n",
       "165      0.40 -1359.9920  \n",
       "169      0.80  -453.8490  \n",
       "174      0.80  -131.1200  \n",
       "\n",
       "[10 rows x 21 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print('左侧侧最大异常值为：',df[df.Profit<=left_max].Profit.max())\n",
    "df[df.Profit<=left_max].head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述两个可视化结果显示了异常值分数并突出显示异常值所在的区域。从图中可见异常分数反映了基础分布的形状，异常区域对应于低概率区域。然而，到目前为止我们只是对Sales和Profit这两个单一变量分别进行了分析。如果我们仔细研究,可能会发现，由我们的模型确定的一些异常值只不过是数学统计上的异常,它可能并非是我们业务场景中的异常值,比如某些利润很高的订单可能是由于商品本身的利润高所导致,它可能在统计分布上是异常值,但它在实际的业务场景中并不应该是异常值。下面我们同时观察Sales和Profit这两个变量的散点分布,并对Sales和Profit进行线性拟合,那些严重偏离拟合曲线的点,可以被认为是异常值,以这样的方式来判定异常值更符合实际的业务场景。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3df25f978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.regplot(x=\"Sales\", y=\"Profit\", data=df)\n",
    "sns.despine();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当我们的数据不是不是单变量时而是多元变量时，异常检测的方法变得更加计算密集并且在数学上更复杂。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CBLOF(Cluster-based Local Outlier Factor)\n",
    "\n",
    "CBLOF算法时基于聚类组的本地异常因子计算异常值分数。  \n",
    "CBLOF将数据集和由聚类算法生成的聚类模型作为输入。它使用参数alpha和beta将群集分为小群集和大群集。然后基于该点所属的聚类的大小以及到最近的大聚类的距离来计算异常分数。我们使用PyOD(https://pyod.readthedocs.io/en/latest/index.html) 库来实现CBLOF算法(https://pyod.readthedocs.io/en/latest/pyod.models.html#module-pyod.models.cblof)\n",
    "\n",
    "* 将销售额和利润标准化处理将其缩放到0到1之间。\n",
    "* 根据经验将设置异常值比例设置为1％。\n",
    "* 使用CBLOF模型拟合数据并预测结果。\n",
    "* 使用阈值来考虑数据点是正常值还是异常值。\n",
    "* 使用决策函数计算每个点的异常值分数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      Sales    Profit\n",
      "0  261.9600   41.9136\n",
      "1  731.9400  219.5820\n",
      "2   14.6200    6.8714\n",
      "3  957.5775 -383.0310\n",
      "4   22.3680    2.5164\n",
      "---------------------\n",
      "      Sales    Profit\n",
      "0  0.011552  0.442794\n",
      "1  0.032313  0.454639\n",
      "2  0.000626  0.440458\n",
      "3  0.042280  0.414464\n",
      "4  0.000968  0.440168\n"
     ]
    }
   ],
   "source": [
    "cols = ['Sales', 'Profit']\n",
    "minmax = MinMaxScaler(feature_range=(0, 1))\n",
    "print(df[cols].head())\n",
    "print('---------------------')\n",
    "df[['Sales','Profit']] = minmax.fit_transform(df[['Sales','Profit']])\n",
    "print(df[['Sales','Profit']].head())\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面的代码参考了\"比较所有已实现的离群值检测模型的例子\"(https://github.com/yzhao062/pyod/blob/master/notebooks/Compare%20All%20Models.ipynb) 和\"使用PyOD库在Python中学习异常检测的一个很棒的教程\"(https://www.analyticsvidhya.com/blog/2019/02/outlier-detection-python-pyod/) 这两篇文章。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "异常值数量: 100 正常值数量: 9894\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAHfCAYAAACf2pskAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xl8VNX9//HXSSaTCUkQQmKYLBB2EAFFkKCCQcUFV9RCf9YNBSpalGpFxQ2tyuLSVipWXFvqgl93LbXQlogLkUU0lB0hewIJYQtkkkxyfn/cSZjJOkkmme3zfDzyMMzc3Hsyg7znc8655yitNUIIIYTwTSHeboAQQgghmiZBLYQQQvgwCWohhBDCh0lQCyGEED5MgloIIfycUkp5uw2i40hQC5+hlJqrlLra2+0Qwp8opUYAL3m7HaLjSFALAJRSE5VS+5RSOUqpuxyPzVdKlSmlCpVSWUqpW50eX9jEeR5TSh1QSuUqpa6td54ip6+p9X7ubOBs4LOm2uN07Hyl1HxPvwaeopRKU0qld+L13qp9b5ppT0YntMPt90UpdaVSKlspVaKUeqqd12309VZKnaOU+qg9527mmrre3+cNHXEdd2itfwKqlFK/8FYbRMeSoBYopboDfwemAqcD9yqlBjue/rPW2gqcCzyrlIpt5jwTgduAYcC1wJtKqRin8/R0+lpR78efAO7RWusW2uMxvhz2gczx/i4H/h8wCLhBKXWpGz83RynVzd3raK2/01pf2/aWtijF6e/z6LaeRCl1q1IqpZ1teRjj/xPpAg9AEtQC4Gpgg9Z6vdb6KLAamOB8gNY6H8gH+jVznquAd7XW+7XWG4CtwAUtXVwplQiUOa7hVns85PEOOKdo2QXAdkeQHgTeA65w4+fmAG4HtR+5FUhpzwm01mVABpDqgfYIHyNBLcCoWnc6/fkZHF3QtZRSpwFJwO5mztMXyHb6cw7u/QM0HHDuOmyxPfXa5tL16dwVrJT6taMb/kBtF6tSapFSqsjxfZFSaqvTz05SSu1QSu13rrgd55yllHpDKdXca1Crq1LqX45hg0ecznONUmqPUqpAKbXE6fGrlVI/O9r5hlIqxPH42UqpzY7Hl9VWTEqp6Y5zfAckutGeRimlbnQMMdQNbTgev98x7JCrlLrR6fEnlFL5juduauNlG/17opRKUUplOV1rvuPrN473KxnY4HjPurjxuzXoEldKDVBKfa2UKlZKfVh7HkdV+5ZS6neO92xQW34xpdS5SqmtjnP8n1LK5Hh8pFLqB8f7+LZSyux4z4uAc4CPHL/XoHrHFyil/qiUCnV6TZ5USi1WSh1USoU7XT4DGNGWdgvfJkEtwKhSymr/oLXOcapuf6OU2o9RHS/RWpc2cx4LUOH050ogwuk8teN5M+r9XHfgkJvtaa1ngcuAXsAgpVS01voBrXVPx7l7aq2HAiil4oAlwMVAf+AXSqkznc71EPAtMMZx/APKdZyyyCkYRgCPAqcB05VSoxyP/xr4haM9aY4PQAC/B+4BrEAV0EcpZQbexqi4egF9gGscPRCLgLHADbSxilLGcMJCYDxGWDyplBqmjCGMmzA+QI0DXlZKRSmlejn+PNBxzWfbcl2a/3vSgNb6z473KxcY7XjPTrTx2n/H+OBnBY5ivB+1LsZ4jUcCe9w4V5bjPXf+UHkbcL9juCgKuFgpFQZ8AMzF+LB7CnCr1vpTx+/1HXCt4/fa6XT8g472DKnXztuBI8BgrbXz63gI4/8lEWBM3m6A8AlVQN0nc2VMAit3/PHPWusHlVL9gHSl1JpmznMC4x/hWuGOx6Jrz9PEzx3ECKJm26O1/qebv4/zON03wNPAJ8AsrfWxZn4uFaM6Xe/U/qHAZsefV2qtX689WGu9CCMwXS+uVBqQqbVe7/jzSowg3IjxD/kvgHnAAOBUYJujnb/D+If891rrPKXUMIweiX85Tm3GCH4NZGitsx3n/0+zr0bTJgJfaK1zHef5GLgEI8Te1lofBg5jvH8AZUqpOcB9GEMR8W28blN/T+pTGL+rRyilooHRwJuOh0wYHxJqHQZma61r3DxlitbaVu+x+4ApSqnlGPM6VgCDgQqt9b8dx7TUzT8YqNRar3K0+y8Y4bzU8fwWrfXTjfxcLMb/SyLASEUtwKge+jr9eRLGJ/k6WuufgXU4qskm7MW1q7s3sM+N6/+Ia1XYYnta4NwVfBXwIsakpf85quamKGBN7QQhjND80On51sycdg6YGiBEGROhNmL8f/e08/m01ndihHccsEkpNdTRnj1O7UkA/kjDAHM3WFpqp6aRYFRKXa+USlBKjQM+xnifb23HNd39e9LmLv0mKMBW7/W83+n59a0I6YYnN4YrMjDa/RLGh8PGjhuqlGpp7kZz70tTfw/PA35wr7XCn0hQC4CPgIsc3Z7xwKVAuvMBSqmeGGG6s+GP1/kM+KVSKl4pNQajy665ChwArfV+4xKqNpxbbE89R4EkZRgGnO9ocxfgfxj/eD2G0Z3e3+nnDiqleiulwpRSp2D8A3imUmqQo9t5NUZ3aFsMd4wznoLR9f6949p2jMooAjir9mBljJPnYwT4doxu5x1AF6XUOEcILAemO36fVKVUkqM7+sI2tnE1cIVSKlEpZQUmA6swKvgblFKnKKUSgD9jfBgYg9Hb8C7Gh6e2WoMxDHGeUqoHxuz+zzHex1ilVITjuvVnbJcAvR3vcwyt5JiY+D+l1K8cDy3AuNvAU2IwPlA+j1Gd14bxTsCilLrA8T4+jOtYcgnGhxUcr8cOIFwpdZHj7+GvgWZ7k5Qxk36E1nqjB38f4SMkqAVa630YY5IfYFR8T2uttzmerh2j3ozRjfe54/F7lXFvdO3XNVrr/wCvYYTjhxjjcIdwz8PAS0opUwvtacxmYAvG+PEDOCoZxzjmUsdzucDXnOzWBmPM8FugEBiutT6AEYSfAVnAOq31p262v77tjmvvBN7RWq8DfnJ8FWJ8cNiCMd4L8CTGh5Ei4Bjwuda6EiPElmCEuA142dHl/TjGBLxPMXokWjK63vv1vNZ6B8a4+zcYvSWPa623OLpc33G07xvgt1rrIoz343SgAKMLvkwpNbDRqzXD0aV+I8b4+07g71rr1Y75D286rvkSxmxwZ48Bb2EE2yWtva7DTcAspVQhRhfzk208TwNa6xLgrxh/d97EeF8GOt7HX2AEeB5Gd7vzAiULgYeUUgeB27XWVcD1GHMAsoBdwCstXP5PGPMcRABSsh+18BVKqVuAEq31P7zdFiH8hVJqOHCV1rpdC8cI3yVBLYQQQvgw6foWQgghfJhbQe2YHPR1M8+HKaU+V0p9q5S6zXPNE0IIIYJbi0HtmE34VyCymcNmA5u01ucC1zvuVxRCCCFEO7lTUVdjzDw92swxacD7ju/XAqOaPlQIIYQQ7mpxZTLHvYeo5jdlicS4fQSglEZWLFJKzQRmAoSGR5wV1TOl7rloS6i77RVedMxW7e0miABXXl7l7Sb4LV1lo+pwATiv2aJCCOuWgAqzNP2Djaiy1V9wTXiCPppXorVubtGlRnlqCdEyjAUcjmCsb1tW/wCt9TJgGUDy4GH6t8vaenuq8BVrdzW37LcQbfPT1v3eboJfqj5xhLw3pqHtJ1dFVaEmev5iEaFdTmn1+Yq2bfdk8wRgW3V/dstHNeSpWd+bMJavA2PFnSwPnVf4sPEDY1y+hPCEEUPbuoR4cAvtcgo9Jt6DMplR5i4ok5keE+9pU0gL39LqitqxRu1pWus/Oz38V2ClYy3g0zCWSxRBpn5YS8Ut2mrE0HiprNsgatD5RCSfgf3ofkxd49sV0j1PGyJVtY9wu6LWWqc5/vvfeiGNY0nDiRjLMV6ktZbBTCHVtmgXqazbJrTLKYT3HOiRSrrnaUM80CLRXh7b5lJrXcDJmd9CuJBqW7SFVNbeJ5W198l+1MIrnINbQls0R8JaBDtZQlR4nXSRi5ZIN7h3SRe4d0lFLXyKVNqiKbVhLdW1d0gXuPdIRS18llTaojFSXXuPVNbeIUEt/IIEtnAmYS2CiQS18CtSZYtaEtbeIVV155OgFn5LAltIWHuHhHXnkslkwu/JBLTgJrdviUAnFbUIKFJlByeprDufVNWdR4JaBCQJ7OAjYd35JKw7hwS1CGgy+Sy4SFh3PgnrjidBLYKGBHZwkLAWgUaCWgQdCezAJ2HduaSq7lgS1CJoSWAHNgnrziVh3XEkqEXQk8AOXBLWIhBIUAvhIIEdmCSsO49U1R1DglqIeiSwA4+EdeeRsPY8CWohmiCBLYTwBRLUQrRAAjswSFXdeaSq9iwJaiHcJGHt/ySsO4+EtedIUAvRClJd+z8Ja+FvJKiFaAMJbP8mYd05pKr2DAlqIdpBAtt/SVh3Dgnr9pOgFsIDJKz9k4S18AcS1EJ4iFTX/knCuuNJVd0+EtRCeJiEtf+RsBa+TIJaiA4g1bX/kbDuWFJVt50EtRAdSAJbiJMkrNtGglqITiBh7R+kqha+SIJaiE4i1bV/kLDuWFJVt54EtRCdTMLa90lYdywJ69aRoBbCC6S69n0S1sJXSFAL4UUS1r5NwrrjSFXtPglqIbxMwloI0RwJaiF8gHSF+y6pqjuOVNXukaAWwodIWPsmCeuOI2HdMglqIXyMhLVvkrAW3iJBLYQPkq5w3yRh3TGkqm6eBLUQPkzCWgghQS2Ej5Ow9i1SVXcMqaqbJkEthB+QrvDGVRw7xKF9W6k4dqhTrythLTqTBLUQfkTC+qS8779k9QNX8t0f7mL1A1eS9/2/OvX6EtaeJ1V14ySohfAzEtZGJf3jX5+iuqoCe/lxqqsq+PGvv+/0ylp4noR1QxLUQvihYA/rEyUFKJPJ5TEVauJESUGntkOqatEZJKiF8FPBPG7dJTYBbbe7PKar7XSJTej0tkhYe55U1a4kqIXwc8EY1uHR3TnjlkcJDQvHZIkkNCycM255lPDo7l5pj4S16Eimlg8RQvi68QNjWLur1NvN6FRJYy4h7rSzOVFSQJfYBK+FtOgYPU8bQtG27d5uhk+QilqIABGslXX3PkN9IqSlqhYdRYJaiAASjGHtSySsPUvGqg0S1EIEGAlrIQKLBLUQAUjC2nukqvYsqaolqIUIWMF8+5a3SVgLT5KgFiLASVgLfxfsVbUEtRBBQMK680lVLTxFglqIICFh3fkkrD0nmKtqCWohgoiEtRD+R4JaiCAjYd25pKr2nGCtqiWohQhCEtadS8JatIcEtRBBSsJa+KNgrKplUw43jU3ouH/U1hUE12YKwncE42Ye3jJiaDw/bd3v7WYIPxT0Qd2RAezpNkigi44gYd15JKw9I9h21gqKoPaFMPaE5n4PCXHRHhLWQviugAvqQAnl1mrq95YAF+6SsO4cUlV7RjBV1X4d1MEayq1R/zWS4BbNkbDuHBLWojX8KqglmNtPglu0RMJa+Itgqap9PqglnDuWBLdojIR1x5OqWrjL54Jagtm7nF9/Ce3gJmEt/EEwVNU+EdQSzr5Jqm0hOpZU1cIdXluZbGxCTN2X8A/yngUfWb2s48nyou0X6KuVeSWoo8J8opAX7SCBHTwkrIXwLlnrW7SLVNnBQcK6Y0lV3X6BXFVLUAuPkdAObBLWQniHBLXoEBLYgUnCuuNIVd1+gVpVS1CLDiWBHXgkrDuOhLVojAS16BQS2EII0TYS1KJTyTh2YJCquuNIVd0+gdj9LUEtvEYC279JWAvROSSohddJYPsvCeuOIVV1+wRaVe1WUCulXldKrVNKPdLE892VUiuVUhuVUq94tokiWEhg+ycJayE6VotBrZS6FgjVWo8F+iqlBjRy2E3A21rrUUC0UmqUh9spgoiEtf+RsPY8qarbJ5Cqancq6jTgfcf3q4DzGjnmIHC6UqobkAzkeqR1ImhJdS2EEAZ3gjoSyHd8Xwo09jHvG6A3cDew3XGcC6XUTEfX+MZDpSVtbK4INhLY/kOqas+TqlqAe0FdBkQ4vo9q4mceB+7QWj8J7ACm1T9Aa71Maz1Kaz2qe0xsW9srgpQEtn+QsPY8Ceu2C5Tub3eCehMnu7tHAFmNHNMdGKaUCgXGANojrROiHglr3ydhLYRnuRPUnwA3KaVeAKYAW5VST9U7ZgGwDDgCxADverSVQjiR6loEG6mq2y4QquoWN4bWWh9VSqUBE4HFWusi4Kd6x6wHhnZIC4VoQm1YrytoMCVCeNn4gTGs3SXvixCe4NZ91FrrQ1rr9x0hLYRPkeraN0kXuGdJVR28ZGUyERCkO1wI0RR/7/6WoBYBJZDDuuzwQXK2Z1J2+KC3m+I2qao9S6rq4CRBLQJOIFbXP/z7M56aMp5X7ruZp6aM54d/f+7tJrlNwlr4An+uqiWoRcAKlLAuO3yQ9xc/RFWFDdvxY1RV2Hh/8YNSWQcpqaqDjwS1CGi+HNbudmWXFuYTagpzeSzUZKK0ML+JnxBCBBIJahHwfLErvDVd2THWRKrtVS6PVdvtxFgTO7qZHiVVtedIVd02/tr9LUEtgoavhHVru7KjuvVgytyFhIVbsERGERZuYcrchUR169HJLW8/CWshWq/FBU+ECCRjE2K8vkBKbVd2VYWt7rHaruymwnfkRVcycNQ5lBbmE2NN9MuQFkK0jVTUIuh4uyu8rV3ZUd160GvIcL8PaamqPUO6v9vGH7u/JahF0PJWWAdSV3ZbSVgL4T7p+hZBzVtd4dKVLTxhxNB4ftq639vNEB1MKmoR9LxZWQdCV3ZbSVUtvMXfur8lqIXAd2aEBxsJ6/aTserAJ0EthIOnJ5n549rcQgQLf6qqJaiFqMcTYe3Pa3N3Nqmq20+q6sAmQS1EI9oT1oGwNrcQwndIUAvRhLaGtazN3XpSVbefVNWt5y/d3xLUQjSjLWEdKGtzdzYJayEaJ0EtRAtaG9ayoIkQwpOU1rrTLzpk2Jn6jY/XdPp1hWiP1i6MUnb4oCxo0gZrd3l3LXZ/JwugtF7Rtu2dch3bqvs3aa1HtfbnZGUyIdzU2lXMorr1kIAWQrSbdH0L0QqyMErHk7Hq9pFJZYFHglqIVpKwFiKw+PrsbwlqIdpAwrpjSVUtxEkS1EK0kYR1x5Kwbjvp/g4sEtRCtIOEtRCio0lQC9FOEtYdR6rqtpOqunV8eZxagloID5CwFkJ0FAlqIYRPk6paBDsJaiE8RKpq4Wuk+7t1fLX7W4JaCA+SsO4YUlWLYCZBLYSHSVgLITxJglqIDiBh7XlSVbeNdH+3ji92f0tQC9FBJKyFEJ4gQS1EB/KFsC47fJCc7ZmUHT7o7aa0m1TVbSNVtX+TbS6FCGA//Psz3l/8EKGmMKrtVUyZu5CRF13p7WYJIVpBKmohOpi3quqywwd5f/FDVFXYsB0/RlWFjfcXP+j3lbVU1aKj+do4tQS1EJ3AG2FdWphPqCnM5bFQk4nSwvxOb4vwPun+9l8S1EJ0ks4O6xhrItX2KpfHqu12YqyJndqOjiBVtQgmEtRCBKiobj2YMnchYeEWLJFRhIVbmDJ3IVHdeni7aUKIVpDJZEJ0orEJMawrKO2064286EoGjjqH0sJ8YqyJEtJBbsTQeH7aut/bzfALPU8bQtG27d5uBiAVtRCdrrO7wKO69aDXkOEBF9LS/S2ChQS1EEII4cOk67sFfeIiO+1a+4qPd9q1hHd1dhd4oBo/MIa1u+R1bA3p/nafr3R/S1A7dGYgt7YNEuCBScJaCOGOoA1qXwhmdzXWVglvIQxSVYtAFzRB7U/B7A7n30dC239JVS2EaElATybrExdZ9xXIguX3DFS+sHGHCC6ySpn7fGE50YCrqIM9rKTSFsFIur9FIAuYoA72gG6MhLb/kC5wIURT/LrrW7p83Sevk++TLvD2kQVQWke6v/2HX1bUEjhtV/vaSYUthBD+wa8qaqkKPUdeS98kVbUQvsfbE8r8IqglVDqOvLYikEj3d+tI97d/8OmglhDpPPJa+w6pqoUQznwyqCU0vKejXvtDB0vYlvkDhw6WePzcgUjCuu2kqhaBxmeCWmZw+xZPvherPv+Aa9OGc88tk7k2bTirv/jQI+cVQojO4s1xaq8FtXMwSzj7rva+N4cOlrBg3t1U2Mo5XnaUCls5zzw0WyprN0hVLTqDjFP7Pq8EtdnkM4W8cEN7PkwV5udgMoW5PGYymSjMz/FE04RolHR/i0AiiSnc1pawtib2wm6vcnnMbrdjTezlqWYFNKmqhRAS1KJVWltdd+8Ry7wFSwi3RBAZFU24JYJ5C5bQvUdsB7ZSCCECh9Jad/pFR5x5lv5XekanX1d4VmtWNzt0sITC/Bysib0kpNtA1gFvG9mow30/bd3v7Sb4haJt29v8s7ZV92/SWo9q7c/55RKiwjf0iYt0O6y794iVgBZCiDaQrm/RLjJjv3PIWLUQwUuCWrSb3GInfJXM/haBQIJaeIyEdceSqlp0JLmf2ndJUAuPCsSwluVPhRC1vLFCmQS18LhACmtfW/5UqurWk+5v4e8kqEWHCISwluVPhRC+QIJadBh/D2tfXf5UqmrRUWSc2jdJUIsO5c9hLcufCiF8gQS16HD+Gtay/GngkHFq4c9kZTLRpJKSYvJysknq1ZvY2Lh2nas1q5j5kolXXMeosef73PKnYxNiZFlRIbyk52lD2rWUaGtJRS0a9fEH7zF6WH+mXHMpo4f15+MPVrT7nP5cWZ82fKTPhLQQIrhIUIsGSkqKuXf2r7GVl3Ps6FFs5eXcO3smJSXF7T63v4a1L5JJZaIjyIQy3yNBLRrIy8kmLKzebOdQE3k52R45v4S18AYZpxb+SoJaNJDUqzdVVa6zncvKjpH502YvtUgIIYKXBLVoIDY2jieeea7B44/P+51Hur9BqmpPke5vIQKfW0GtlHpdKbVOKfVIC8ctVUpd6ZmmiY5SUlLMjz9sbDZ0h484k8ioKJfHwkxhHuv+Bglr0fmk+1t4Smeu+d1iUCulrgVCtdZjgb5KqQFNHDcO6Km1/tzDbRQe5O5s7qRevamurnZ5rMpeRVKv3h5tj7+HtS9s2CFVtfA0mVDmW9ypqNOA9x3frwLOq3+AUioMeBXIUkpd7bHWCY9qzWzu2Ng4XliyDEtEBNHRXbFERPDCkmXtvp+6Mf4a1r62YYcQIjC5E9SRQL7j+1KgsY9aNwPbgMXA2Uqp2fUPUErNVEptVEptPCibGnhFY7O5m+vOnnz9VDZs2cP7n37Jhi17mHz91M5opl+QDTuEEJ3FnaAuAyIc30c18TNnAsu01kXA34EJ9Q/QWi/TWo/SWo/qIQtHeEVSr96Ul5e7PFZuK2+2Ozs2No4zRo7qkEramb9V1b62YYd0fwsRuNwJ6k2c7O4eAWQ1csweoK/j+1GA52YciXapP3FMoVyer/9nb3IOa18Y+22ObNjhv2RCmfA37gT1J8BNSqkXgCnAVqXUU/WOeR2YoJRaC9wJNLy3R3S6+hPHlr/5GpYIi8sxFovFozO5PcEfxn5lww4hRGdRWuuWD1KqOzARWOvo3m6XEWeepf+VntHe04hmlJQUM3pYf2xOXd3hFgsKsNlsdY9ZIiLYsGVPh3dtu6ukpJhRp/enwubc7gg+Ss/0yRA8dLDEpzbskI063LN2l7xO7vhp635vN8HntWZzDtuq+zdprUe19hpu3UettT6ktX7fEyEtOkdjE8fMYWbuue+hTpnJ3VZ5OdmYzb4z9tsS2bBDCNHRZJvLANXYMqBV9ipunDadG6dN99j2lZ7WWLtl7Fd42viBMVJVC78hS4gGqObug+6smdxt4dxuGfttPZn9LUTgkYo6gE2+firj0i7w2eq5KbXt/v6nHT4z9iuEEN4iQe1HSkqKWx26tRW0v4mNjePyC+PYV3zc200RQgivkq5vP+HuGt1CCCECiwS1D6tdrGTXzh1ur9Hd1mt4avtKT/O3Fct8gYxTu0cWPmmZbM7hGySofZRzBX3x+NHUv9/dE1tOSpUuhBDt0xnbXUpQ+6D6u1xVVFRQ4bRICbR/y8nW7KTlbVJVCyGCmQS1D2pssRKLJQJzeLjHFipp7U5aQgghvENmffugxhb9QMHqrzZw4niZR261ampBlPZU6R2pT1ykzABvhbEJMbKcqBABQipqH9TUYiUDBw322EIlzS2IIoQQwndIRe2jOmOxEn9bEEWqauFpspSo8AcS1F7U0gImnbFYib8uiCKE6BwjhsbLLlpeJl3fXtLRt0b5+v3RbSUzwN0n91MLERgkqL2go2+NkvujhRAicEhQe0FH3hrlT/dHCyGEaJkEtRd05K1RwXB/tHR/CyGCiQS1F3TkrVH+dn+0EEL4u45eRlRmfXew2pndXSKjXBYr8eStUfVnj7+wZBn3zp5JmCmMKnuV3B8thBB+TIK6A/3tzWU8+uB9aK2pqqwk3GJBKcULS5Yx+fqpHrk16uMP3uPe2b/GFGqiqqqSJxe+wM3TZvjV/dFtIfdUu0dWKGuZ3EstfJ0EdQf525vLeOC3v3F5rHZjjXtnz2Rc2gXtDlDniWO1HvjtXQDcPG1GQAa0EEIEGxmj9iDn/aMfvn9Ok8eFhoR6ZHJXXk42ptCGn7UeffDeNs3yDtR7r4UQwp9JUHuI873LE8eNwm63N3mspyZ3GRPHKhs83pZZ3nLvtRBC+CYJag8oKSnm3t/MrLt3ubKyYXg6+/3CFzy2scaTC19o8Hh1TXWrPgj4673XcpuWEJ1jxNB4bzchqElQt5FzN/ErL/0Rm2P8uTlms5lFf3iJm6fN8Fg7bp42g0V/eAlzeDiRkVFtutUrGO69FkIIfyWTydqgdqZ1WFgYtvJyzFVVXAScBoQBSwF7WBgqJIThKoTyajuX3/8wN93WMRO8bp42g0lXXuMyy7ulDT+cyb3XgU1mfgvh3ySoW6m2m3uczcbE8nLGA2fh+kIuB2ZfXcWvL4SwP0C3XVCz9E9UrV9HZeo5lN80jZr4nh5tl/OtXs4fJKqqqupuB2vuZ+XeayGE8E1Ka93pFx1x5ln6X+kZnX5dT/jxh428ffmFLHe6JcoObHJ8lQMLQmD7SxDXFcqXQuhPYC5zOkkYHL91Fsfvvo+a5F5uX9udKrmkpJgw4r29AAAgAElEQVTRw/q73LJliYhgw5Y9LQZva6pwXyL3U7dMKurmyX3ULZOtLptXtG17i8fYVt2/SWs9qrXnloraTUc2b2Kf1vTeeA6f2OEr4BuM/240mSg3mTCZTJSVlfGXW42QXpGhuPN/4aSkJFCVnc/L51ZwbgmwESJffZnIYy9T9JfmJ57VcrdKrh1vdg7q2vHmlsI3mPemPnSwhML8HKyJvejeI9bbzRFCiDoymawF6sgRjl90HskTxvLCnf+P8562MG0CXGaGxRHwlQkqw6B/SjwhupJlt8OvL4Tio3Dn38JZs/Z7Nm35mb9/s56r1lkovh1YCKQBF0HPf5jp+Q8z6mBJk21ozaxsGW9uvVWff8C1acO555bJXJs2nNVffOjtJolONn6g7N0tfJdU1M1QpQfpevmFxG/fRnVkJKtefJXM+HgmjB/DpqdslNkgJQ7ATlZxNilxRiUNkFUMKb0SGT58OADDhw+nd3ICWcV7IQ42jwF2w5kpEAfEj0rg2J3zOX7/vAbtaE2VLOPNrXPoYAkL5t1Nha2cCozX95mHZjNq7PlSWQshfIIEdRNU6UFirr6UsO3byDKHkfLTT9CvH8OB3skJlNn2MrrfyePjuhpV9IafIcoCh45DVnY+mZmZDB8+nMzMTLJzC/gxByY+G0FcfAIFBYWEUMXKCVWMOwzRT89HVdgoe/gJUKru3O5WybVjzOPSLmDDlj1+Od7c2QrzczCZwupCGsBkMlGYnyNBLYTwCdL13Qh1qJSYay4jbMtP2E+FSeEhZB43JizVBm5KvexbkaEY/KCF29/tx1mPR3DHu/FU2qsZf94YRg7rx4TxY1h4vY0H37ew9psMdu/ew7p16wgLj+KqteEcnQaEQNRzC4l+7CFwmuTnzraY9VcW+zr9v5wxclRQhHR7Fj6xJvbCbnf9EGS327Emuj/JTwghOpJU1PWVlxshnfkj9ATTI/D4jgomjB9D7+QEsnMLWHqTra6LG06OR7/+1rscOXKEU045hdtvv53P/7GKyVddysLL93JmitEdnpzs2h2ekpLC8SP72ZlSwOi7gSUQueQFamJjOX7P7+qu0dy2mM5j2LXd457a+CPQde8Ry7wFS3jmodmYTCbsdjvzFiyRaloI4TMkqOspKTuGrfdmkg6AaR7QHaaOhQuG2sgq3usyDl0rqxhCTRHccMMNJCcnk5ubS1RUFJGRkfTpnUj3yL11P5Ob69odnpWVRXXlcQ4dh+JBEDcb+CNEz59H5agxVJ07ru46Tc3Kbs9MbwETr7iOUWPPl1nfQgifJF3fTj796H3OH9Wf6/b1w3o8nBU7Tz4X19WYOJZVbFTQzvYfgbITNjIyMti5cycZGRmUlZWxbds2l27yuK6w9GYb488bQ//+/Rk7diy2E8dQISE8tLIfgx+0sMIOXAloCP/3l261W2Z6t1/3HrGcNnxkwIb02ASZ1SxER+p52pAOO3fQV9TrM77jq/+upl/f/vxp7j2s+fr7ump3wvgxXDDUdvKe6L+Fk5jQk+ycAp77ZSUzLjDOsWEvJCUluXRpJyYmMuvX03lzht2lAq+tzjdn/czhEzDrr5aG13zSRtxoiOr3LGU83eLvIDO9hRAicAVcUEcteJKwdd+iyo4RUnYMlMI+cDD2IUOpHDOWygsvrjt26uTLWLvmPwBMx1hZLGrdOhg+3PV2Kowx6AfmPcGCBQuIT+jN3W/nAjZmXACj+8KzX+a5dGnn5+fz0BV2LhjasI1xXeHi4cYM8ZTejdzCdWQvcf0a/lxzmhvDFkII4b/8NqhDs7OwvPd3wtf8G/Nt30HtxN//ABtdjzXt3AGff8Kx0+DzVdDntkyy9/7MFkdIdwWeAqKALzMy6DFyJMePH6/rts4qhgRrT5566ilMJhPR0dFERETw23eq6R1bhdkEZpMiNTWVxMRE8vPzqaysZPnmRF5YVcJfbqlg6tiGv0NKHGTlNLyFy3lGec8/mDk4+t9UnTe+xdckmFcWE0KIQOV3Qa3Kyoj8wyKiXlwEtcOyZwNjHN9fDVwERAAWjIW48+Hf/4R3dofxbVUKuX8bw1nl5eQDfwUGAfHAt8AVf/sbfb/9lry8PG5MtZFVDF/vhF17CzCZTHzzzTd1oTp27FhueTOKsmNlaCp5+eXX2LJlCy+99BJdu3Yluls8JYdOMP2NGi4YWtVgElpcV1h6k63pGeWbgBcg+pwnKF35nw58VYUQQvgq/wlqrbH837tEPz6P0MIC47FU4BzAuXu5b8Mf3R4GVxVFkLExgzccIfvByJFEVFdzh+OYAmAa8Pobb3DLLbeQmZlJamoqX+fGkp1fwjnnjCE3N9elm9pqtZKXl0dycm/y8/O5a9YM4k+NISQkhPT0dJdA35xVxcXDG7Zt6lgY3svG+p/3cnY/GJLo9OQg4z/mDV9DRQWEh7fnFRRCCOGHfHfWd00NVJ7csCLyhUV0m3mrEdJ9gfnAbIw9Ji2Nn6J2pbB//w+S6032+nToUC7v04dlQDowASiMiuKWW26pOyYpKYmCA0eYP38+P/74IwcOHCAzMxMwFj4pKCjgvffeY/fu3WRkZGAyhfLLM/aTkGBtEOg7CxvOFgdjktp5T1t48bt+nPe0hRXrnJ6MAhKAKgj7aXMbX0ghhBD+zOsVdWjWPuO/2VmYtm81vrb9D9P2rYT8vzJj8wqAEozB5KnAeJr9iFF8FF5do3juy3CSkxLJysnHVpntMha8Z88ecsxm1kZFYTKZWL58OTfeeKPLMQcOHODTTz/luuuuIyEhgfPPP5+xY8fSq1cvsrOz6datG7fffjsVFRVMnTqVhIQEXlydSw0FLucpKCjg1Q0pzP+0iKU32Zg61mjj5iy486/hTc40B2AgUABh339H1dmpHfMmBIA+cZGy3aUQIiB5JajDjvxAz3+YjT/cj9Hv3Bjn7U9HYlTPEc2fe0WG4o63zFRWh7Ju3bq6AExNTWXMmDEkJiZSWlrKG2+8wZAhQxgzZgzV1dVERUVRXV1NWloaKSkpxkIk1dUMHTqUpKQkdu7cSWlJIdXV1eTl5bFy5UrS0tKMcJ0wgfj4eLJyClm5chW7d+9m3LhxxMXFUVBQwPz585k7d25dEB+12Xjw/yx0796NLl1DsVqtgOvGHS5BnQ7m79dxYnYbX3AhhBB+y+sVNacAFUAMkOT4SnZ8OU++6tLyqWqX8nzpL6/z/PPPu3Q/DxgwgG3btlJRUcHOnTuJizNmR/fv358xY8Zw6aWX0qtXL7799luysrJISUnhkksuYfXq1ezevZtTe3Sl5FAZo0ePprCwkLS0NACsVitdunThkksuoWfcKezfv58HH3yQ3r17s2vXLrp1jWDu3Ll17eiVlMDv3s3j4ceeYNGiRcTExDBo0CBefvllhgwZ0nAdccf3IYcOtfUVFkII4ce8H9SPeO5UWcWQmJDIxIkTmT17tkv3c15eHlZrAiUlJWzdupXIyEiOHz9Obm4ueXl5xMbGkpOTw9atW+sq5Z07d3L77bdz1113MXXqVD7//HOeffZZQkJCyMzMZPv27cyaNYsePXpgMpk4UFLKrFmzXCaSpaamkp6eXnfOrJwCEhPiWbRoEWvWrHGZcGYOreYvt1S4zg537M2hQ3x3OoEQQoiO4/2g9pDio7CvGPZkFVBYWMjSpUtJS0sjJiaGQ4cO8cADD/DEE0/QM8rGpEmTSEpKIi8vj5qaGp588kkWLVpE//79mTRpEnFxcZSVlXHbbbexbNky3nzzTf773/+yY8cOnnjiCXr37s348eOpqqpy6V4/75wxdOt2iksl36+3lauvuIR+fZLIzi1g8RQbv3tvP336D6l3XE+eu2pvw5nhQ4A34dBln7n1OtRudSmLngghRGDw+6Deng9LVsG7GeH07p1EVVU2Z599Nn379sVutzsqaStPPPEEFRUVFGkLGRkZLhVv/ep23LhxZGRkEBsbyxtvvOHy3IQJE9ixYwfvv/8+d911l2vYpiSwN8t1hbKCwgIyHq+kzOa8oUcl97yzy3Uls4ICzkxp5BcMAcyApYmp7U4+/uA97p39a8LCwqiqMpYRnXz9VM+92EIIITqd3wb19ny4Zzl8vdtCYmIiOrSE2J4phO0tICkpiaysLK644gpWrlxJUVERWmvi4+OJiIhwCdeYmBhiYmJcHktOTqasrIzNmzdjtbrealV7brPZTH6+66piOXnGGuD1FzBxuTcaHGuEl3P+eWNI6ZVATl7DrTPB6CXIOgApp7b8eshWl0IIEZj8LqiLj8KvX1d8udVCQkICERGlPP3008THxzNp0qQG1bLNZsNisTBgwABycnI4duyYS7gePHiQ0tJSl8f27t3L1KlTKSoqBJTLc7t37+bmX/2CA/v3M2N8w1XFpo6Fa0Y1vSVmrRkXNH9c7SYgr4aEEXa0jJx98zl73vwmXxfZ6lIIIQKTXwX1q2vgN2+FEBoW7hLIEyZM4OWXXyY2NtblVqeePXtSVFRERkYGVquV1atXc+utt5KamkqvXr0oLi4mPDycEydOkJqaSkJCAgUFBaSmprL++28IC1EMO2O0y3NRUVHsyynCFFLNOQPgkWsahm1c16YDulbxUWPyW2MhXTt7fc3a7xk+eTIcOsa9f/kzL868qy50649Fu7PVZSCPX8s91EKIQOUXU4mLj8Kc5TDrzVC0CqVv374u3dFRUVFMnz4ds9nMwIEDWbFiBZmZmRQXF5OYmMj27dsZPHgwjz76KCaTqa77+sSJE8TGxmIymZg4cSJXXHEFZrOZnJwcQkNCmXp2JRs3biQsLIyKigrMZjNLlixh/fr1mC3RzHzTzOYs6m6n2vCz6+pjtSuj1V+RbEWGYvCDFu74P8ce1Otcn88qhpReiQzv1g327oWuXTnapy95OdmAMRY9elh/plxzKaOH9efjD1YAcM+9D2KxWIiO7oolIsJlq8umfiZYHTpYwrbMHzh0sMTbTRFCiGb5dEW9PR/ufRtWZSpCTSbMZiNk9+7dy+LFi5k7dy7p6ekUFxc36PLWWtOjRw/y8vKYNWsWH330Edddd53LcePHj2fdunUUFhaSmmqs+uX8/PnnjSEkRPH11183mEwWHR1NSbGN+z/vR3ZuAdXVdgb260VWTj5Lb7KBMrquU3ol1j1WuyJZXbXcxGpktbtq5S9dSiJw9Iwz2Pu//5HUq3ejY9H3zLqdkNAQzGYzGph1933cNG26S/Ut49cnrfr8AxbMuxuTKQy7vYp5C5Yw8YrrvN0sIYRolM9W1Fc/D8MeCiV9p4XEpCRMJhMZGRns2rWLjIwM5s+fz6BBg7j00ktJTHTd0zkhIYEnn3ySvLw8pk+fTkxMDJGRkSQmJmK1WtmwYQNWq5WkpCQ2b95MRUUFVquV/v3713s+gR49XCea9e7dm4ceeoji4mLWZWTw09Y9vPW3d7DXhPLEM39kzdrvueOv4cbSoGu/Z1PmHtas/Z47l1tOdnf3amQP6uKTv3tcV3jllzZCFy8C4J4ffmDBcy8SGxtXNxbtrKqqkgqbjWNHj1Jhs/HiCwtdnm/sZ2rHr4PNoYMlLJh3NxW2co6XHaXCVs4zD82WyloI4bN8sqKOmamw1VhISUlg//79lJaWkpyc7BJuiYmJ7Nu3j1dffZVZs2Y1WFu7d29jbPaxxx7jjTfeID8/n127djFo0CD69OnDvn37OH78OL/4xS/o06cPhYWFAA2eN4XCO++8w8SJEyksLGTnzp1s3bqVIUOM+6DnzJnDsmXLSE5OZsqUKaSlpXFqXI+62eXFxcVUVFSQYI0nqzjbrT2oAa4/CGg4PGgI932xmtg4Y+p3Y2PR9dWfRObO+HWwKMzPwWQKo4KTk+5MJhOF+Tl07xHrxZYJIUTjfKqi/uIHUL8CW41xr/O6desICwvjiy++oKSkxGXnqvz8fOLi4rBarfTs2ZMJEyYwcuRIJkyYQNeuXcnONqrFwsJC7HY7U6dOrdt+ctOmTaSnpxMaGsqiRYv48ccfycjIAOCjjz6qe95kMqEJ5fHHHyMlJYXRo0cTHhZKQkICubm5fPLJJyxbtsyl0k9PTyevYD/ZOfksXryYwYMHM2PGDH7OPsCP2a57UI8c1o8J48c0vDWrBmMvaqDmuRfrQhogNjaOF5YswxIRYYxFWyyY6lfY9UK4/s+EWyzcfe+Dnn8D/YA1sRd2u+uHFrvdjjWxl5daJIQQzVNa606/6Ki+Sm98yvWxiFugolphMplITk5mwYIFrF+/nn/9619s2bKFFStWcOeddxITE0N+fj41NTUkJSVRUmJ0WX7yySd1y4Jefvnl1NTUGGtnZ2cby3seOEC/fv3Ys2dP3TX79+/P0qVLufjiiwEYMGAA77zzDqNHj6a4uJiUlBSXlcfOP/98vvjiCy6//HLmzZvHk08+SUJCArt27ao754ABA8jLzeLU2O4Ul5a5zk4fP4YdC41Qrt09C+DMlEZmidvhUNiHVEy6stHXsHYGd5fIKP7x2cf86fkFmMPMVNmbXuikpKSY5W++yovPLyTMbA6oRVFaM+t79Rcf8sxDszGZTNjt9qAZo15XUOrtJvi0tbvk9WnOT1v3t3xQkCvatr3Z522r7t+ktR7V2vN6vet7ez6cNhdCQ0OJjTWW+ywsLGTevHkUFhZSVVVVN3EsPj6eSy65hNDQUNavX18XgGeffTaTJk2ib9++FBQUUF1dzU033cTMmTN57733eOmll0hOTqagoOH2k2azsYtXbZV+/LjxD/7q1atJSEhosNjJpEmT6NGjB/Pnzyc2Npa8PNeVyPLz83n3vf8jMTGR6dOnNzIWbeyM9d9tDSebXTAUsoogpacR3E2FNBhV8tfp/6lbiUwBd959Hzc6TSJrzIsvLMJms2Gz2YDgnFQ28YrrGDX2fArzc7Am9gqKLm8JaSE6Vksh3R5erajVr0AphdlsJjY2lpKSEkJCQhrM4Lbb7SQlJVFQUMCNN97I5s2b2bRpU935hg4dSlZWFjExMZSUlFBdXU1ISAjdunXjyJEjJCcnU1xczKRJk/j444+xWq11XeImk4mEhARKS0vrNtBITEw0btEKDW3QltrtLdPT07n00ksxhYZQoyExMZH8/HwiI8wUHzxMcXExgwcPdl1+1FFRAwx+0OIy8/uc1LO4rcLOzRouN8H8l5c3W+muz/iO66+c6DL2bImIYMOWPU2G7o8/bGTKNZdy7OjJ+8Wio7vy/qdfcsbIVn/I8ylyH3XzJKhbJhV186Sibp47Qd3WitprY9TqV47/KkV4eDinnnoqFouFrl27uq6f3a8fAEVFRfTq1YuPP/6YXbt2uYxXZ2dnU1NTQ0REBEopIiIieOWVVzh8+DARERFER0ejlOKzzz4jKiqK/Px8UlJSiIqKoqampu6e6q+++oqVK1fy0ksv0aVLF+bPn8+ECRMYMWIEqampREdH121vmZaWxuB+ibx0Uznv31nODcP28P6d5dRUV5CZmUlcXBwPPPAAqampnHm661h0/ZnfVquV35TbebEGRmm4sMqodEtKimnMvPvv4epL0xpMEGtpJrdMKhNCCP/jlaDetM/4b21If/311/zwww+sXbuWo0ePkp6eDhgh/PPPP9dVtrt27WLNmjWEhoYyfvx4+vfvz7hx46ioqODdd9+tm9BVVVVVVxE7Tx6rqanh2LFjrF+/nm3bttVNKAsPDwcgJSWFtLQ0unfvTt++fZk7dy47duzgtddeo1fiqRw5csTlA0JufgGTzoArRsIT10O/eJg6ysa4c0Yzclg/Fj3zOH+6oZxlU/eyY6FxHzXgMvObmhoO3H47CzHmkM0C3qXp0N21cwdvvvpyo69rS6HbYCJavUVR/JVU00KIQOaVMWqlFH379iUvL6/BOLDVauWyyy5jyJAhZGVlobVm4MCBLseceuqpZGVlkZSURGlpKSkpKUybNo2KigqmTp1KYmIin3/+eYMNNaxWK1rrBo8VFxdDTSX79u0jMzOTlJSUuu+HDx9OYWEhxQeKeObaiiY30pizXLHsKwvJyUlU1eQxMGov/1rY+FKitTO/7ztnNM8QwujjNuzALcA7jmOaCt3Nm9Y3+pqGhYW5FbqTr5/KuLQLAnYpUSGECDReCeohQ4awdetW0tPTmTRpkstkrMLCQqqrq7nzzju5+uqrueCCC8jJySE9Pb1uVnft1pXr169vsNJYfHw8+fn57Nu3D4vF4nLuAwcOEBoa2mBCWWVlJYunVrOjqJrU1FSSkhI5fvw4550zhv59jA033rmsgkv+C3eMtZHVey9xZ0LcKcbvsz0fln3VcPvMx4+VN7nm99T+MOVEJUpDTRR8Of1+Pnrlz0SbwupmbtcP0ZKSYiIiujR6vg8+X83Zqee49frHxsZJQAshhJ/wSlBHREQAxjhvt27dOP/88+nTpw/Z2dl069aN6upq5syZQ2lpKQUFBVx44YVMmjSJpKQk8vLymDx5MnPmzGHGjBku1XFsbCyXXHIJUVFRWCwWjh07xtixY7FarRQUFKC1JioqitTUVPr06UNRURFdu3Zl/vz5PDR3DiFKsXLlyroPBJOvupSFl+81bp/6D7AfuqyC0wBigBHAYNh6BJKTk+rNEE9k/c97jC0u7UAOsAcYD1iAOFDjoGzk7zj+m98yKjaODb+Z02Sl67zXdEhIKDU11XXPTZtxp9shLYRoSCaSCV/mlaAud6w3nZmZyeHDh3nnnXdITDSq2EmTJtUtcjJp0iS6dOnCypUrG+yW9cgjj5Cbm9ugGr/yyiv54IMPyMzMZOzYsfzqV7+ia9euvPvuu8yZM4ennnrK5XrXXHMN1113HX949vdERETUTRYD6NM7ke6Rxu1URa+UE3brt1g++xjLF58QWpAPa4A1cHU03FzlaMuAAZT+8pc8vHcfV3cD/gtkAbVzuJKBIVB0eSVc7vq6NFXpNrZWd3h4OI8+uZBxaRcycNBgz75BQgghfIZXgnr79u3079+/7j7pG264oe72Jq01y5YtIy0tjZSUFPr06cOuXbsa3M9cVlZWN6t60KBBZGdno5TiP//5D8XFxXXjz9dffz09e/bktdde4+mnnyYiIoIbbriBhAQrBw+W8sorr1BYWMiB4oOEKNe9p7Nz8hn2OZAAKvUQVeeNp+q88Rxb+DymH3/A/M1XmL/9mhprAjMKXyM1NZXTrD3ZuHcftwBsOPk72/sPoGrUGI5fNBv7GWe26vVqbK9pszmcs0aPCfqQlolkQohA55Wg1lrz888/AxASEkJ5eTl79+4lPDycf/7zn6SlpZGZmUlWVhZlZWV1y4fWBuju3bu59dZb2bdvH9XV1Zw4cQKtNa+//jrPPPMMWVlZFBYWUlBQwOzZs8nNzSUupitHjx7m7vFHmDwaPt6wl2e/DGfRU/PIzi3gL7dUADBh/Bh6Jxvj0l+eVYFlDRAFhIae/AVCQrCPHIV95ChO3H0fAA+xlOt27iAz41t2lpTQM+5UqKmmOimZqrNGo7vHtPn1ktuqhBAieHllwROllO7SpQsVFRVUV1c7xl1DjLW1ta4bU54/fz5z585l8eLFzJ8/v26zjNjYWI4cOYLZbKasrIzXX3+9btOM1NRUEhMTKS0tRSlFeXk5sbE9OHxwP8/9spIZF5xsR91uVnEnZ2fXPtY3FHr8HrDB4deXY7vOu8tsfvzBCu6dPZMwp8lmgbD0Z3tJRd0yWeykZTJG3TJZ8KR5HbngiVeC2mw26+eff574+HgSExO56qqrOPXUU1m7di2bN29m586d/OEPf2Dv3r11P1N7O9fs2bP55S9/WTeePXnyZL788kuSkpLYvXs3NTU1mEwmXnrpJWbNmlU3tp2ens7VV1xCxuOVxgSv5mhgMZAJtiuu5vDy90Epl0Nq19ruzFucvHFNXydB3TIJ6pZJULdMgrp5Abcymd1u5/zzz2fKlClER0dTXV3N/v37KSws5OKLL2bYsGEUFRW5LC5SVFTE7Nmzeeutt5g+fTqTJk2iurqaHTt2UFNTw9SpU4mPj6empoaamhpuu+02rFYrVquVFStWcN111xGf0JsxT1hYsa6FBqYDmUAUHH1+SYOQ/viD9xg9rD9TrrmU0cP68/EHKzriZWogNjaOM0aOkpB2kJAWonNISHuX1zblqJ0stnv3biorK4mJiWHs2LF1E8NmzJjhcmtVZGQkL7/8MvHx8ezcuZOamho2btxYN26dlpZGdXU1gwYNYsKECbz22muEhIQwYMAAANauXVt37Lhzx3DBUGOxkm93wqotcPEwOHcQHF4PXd8wPsEcfv5NauJ71rW5pKSY/2X+yG9/M5MKm61uclcwbmwhhBCic3ilojabzezcuZNXXnmF9euNlbaOHj2K1prf/e537Nixg9tvvx2TycQVV1xBWFgYERERhISEkJeXxx//+EdOP/10l5ngMTExXHnlleTl5fH222+TkZHB7t27Wbp0KbGxsVitVjZs2IDVaiUuPpHNWTDpWcXEZyNY/mMfLlwUzulzoe9SyNSwyGTi3ZCTE8hqq+jbb5pChWPnqVotrbEthBBCtJVXgrqyspLCwkJSUlLYvHkzISEhaK055ZRTmD59Oueeey6pqal0796d5cuXc88993DkyBEef/xxUlJSuO6668jOznbpGi8sLOSTTz7h/vvvJzk5uS7EJ06cSF5eHoMGDeKOO+5g0KBB5OXlsTUP0ndaeOyxxwgtLOSUkBC25sOhKjhHw4N2O/fe/WtKSopd7mM+cbxhd6vMwBZCCNFRvNL1HRetOfvs0YSGmjj11FNRSrlM+rr00kt57733uOaaa+qW4+zSpQuPPPIIFouFwsJCli5dSlpaGjExMRw8eBC73Y5SildffZX9+/eTmZmJ1Wrlww8/JCQkhPT0dJflPXcXQUJ8PD8+/jjfVlbyFTDF0b7au5WdK+X69zE7e+KZ56Tbuxh/m7MAACAASURBVJPJ+LR7ZCJZy2QimfB1XglqazcoPxjCN9+to6KiwmUp0LS0NJKTk0lMNKZmDx8+nISEBPLy8khOTqaoqIjx48eTmJjIiRMnCAkJwW638+c//5kFCxaQl5PF1FTN2DFnoVUYPXrEkOjY+KO4uJiKigoGxcZy4b5c7s/Koo+jTacAXYATTu10rpTr38dcKyoqmuEjWreAiRBCCOEur3R9V9iN5TmHDx9OSkpK3VKgYHRj5+fnc9zRxVy7ccaXX37Jnj17+O6776isrGTv3r2EhIRgtVoxm80cOnSIoqIi5l2l+XA9nLDZ0VrzyCOPcrC0lIULFzK6Vy/2nnMO3+Xmct1e6APsA+4GLsM1pMPDw+s2xqjdHjLcYmnwu9ir7S12e5eUFPPjDxub3F9aCCGE/3Ln1qz28EpFHW6CrNz8utXGapcCTUhIYP/+/VRWVjJp0iQSEhIoKSkhLi6OyMjIuqVBU1JSKCws5KuvvnLpzr7i9HI++gKuqoIzgZE2G8V33cUjixdz3333EQXULhHyTyBy3uOsOHKEpS/90aV95vBwVq3d4LI8Z+32kH9/8zX+9PwCwsLMTe5y5cx5M42qKlmoxBOk21sIEUy8EtSmULhoiK3udqw9e/ZgMpmorKzEbrcTEhJCdHQ0ISEhPPbYYzzyyCPMmDGD3NxcHnjgAXJzc+nbt29dd7m1Z0/u6BLOU1vK6VKvhzq3poa3HNV5GTAN+Br4GXh31Nk8esFEevcfwKMP3kuYKYzqmmpeWLKs0TW0Y2PjmHP/Q9w4bbpbC480tpmG3MolhBCiNdwKaqXU6xi7O/5Da/1UM8fFA19qrVsctP3tpfCPzBpmzpzJww8/zJo1a+qq47Fjx3Lo0CFsNhtPPfVUg32eu3btyu7du8nMzGTr1q2su/lmXrTbAcgHNgGbgR+AH7XmwIIFhIaaqK6285bj+mFmM6cPPwOAm6fNYNKV19SFL8CPP2xsMojd3c+5sc00aieoSVC3jVTTQohg0+IYtVLqWiBUaz0W6KuUGtDM4c8BEe5c+NxBMGGQjTlz5tCjRw+Xe6KtViuXXXYZx48fJyYmxuW5Pn36sHjBAt54+GFSU1P51a9+xdt2O3uBW4DeoaFcDcwHPsPYBhqteea5P2GxWOjSJRKLxcKflr4OUDd2XLvq19fp//HYqmOdvZmGjIULZzLjW4jA4M5ksjTgfcf3q4DzGjtIKXUBcBwocvfiK+fCB7+poLDAdTJZQUEB+/btw2w2s78wjy3ffw+5ueQ88wzz9+zhxvvv5/pFiwirqSIiTFMKDAT+BoSHW4jo0sXlOmFhZoaPOJMN//uZD79YzYb//QzoBoHs3FV97OhRbOXl3Dt7ZpuDr3YSmiUigujorlgiIloc024rby1rKoQIbLJ8qPe1uCmHo9v7Ra31T0qpi4GRWuuF9Y4xA/8CJgOfaK3TGjnPTGAmQP+unLX7BsBmfG3dAxk/hdLTbOGLykr6PPUUc+fOZc9bb5EybVqj/fNZSvHuHXcx/41XqayoqHs83GJBATan1cMsERFs2LKnLiBLSooZPay/S5e0JSKCN9/+gJm3/j+OHT1a93h0dFfe//RLzhjZ6nXU63T0ZhpN/T7Ov3MgkG7v1pGKumVyD3XLJKhb5u6s77ZuyuHOGHUZJ7uzo2i8Cn8QWKq1PqzqbWBRS2u9DFgGMCpcaf5y8rmhwFCqoeo4R6OjuGjaNDZs2ED/xERMQHVYGOVhZtZXVrAxNpYVx44xePIv+Oit1wkJMZoTHm5BhSheWLIM4OSWkFWV3HPvgy5taWrsGBreL+2Jrmp3x7TbSsbChRAicLkT1JswurszgBHAzkaOuQi4QCl1F3CGUuo1rfX0pk5Y0z2e8vMvREdFURMVhY6M4liYmaxjR/jT0he5rVcvwsPDqbLZCLVYWPbOh5w+/AxOBYbnZJMaGcUlaWPqrRSmWfHxl5jNZpJ69WbDlj0sf/NV/vT8QpYueZ4/vbCw7taopsaOTx9+Bi8sWfb/27vv8CiqNY7j39mSZJMgptAhIFKlCYKCioCKCgLSQUUBEUUUFBERRECRjhEB4RpUwIZSBFGUpmIHBSkWFBEFDC0JJaRum/tHkiWbbJLdsH3fz/P43GTm7OzZMdffvmfOnCn23Gd/CLvSqnJvXwv3BammXSPVtBDBw5mh78vIu6Ppc/LWBRkI9FNVdVIJ7bc7GvourEXLa9TN23fYfi+411ir1ZKZkVGsfVR0NBaLxRa0e3/eRf+ed9gNUUdEGLCq1ryANxoZPmI0S/+3oMQh8HVrPigWyAX3N/vbc5+duRe7tM8TDCSoXSNB7RwZ+i6bDH2XzdND32UGNYCiKDFAZ+BrVVWdnixWksJB7ej6akkKghZw+jWFFb3e7G+B7Igr158D4fOUh4S06ySonSNBXTYJ6rJ5OqidWkJUVdWzqqquckdIF1VwfdUZha+7Fp5NHR4e7nB5z6KKDgcX3JLlz6Hm6PyU9FjNQPg8QggRTDy9fCj4aGWywhxdXwWIioomM9N+GLxw0BYs6fnf0SNE5l+zLklEhAEU/OZ6sytC4fpzaaSadp1U086RarpsUk37B588lKMwR/caz375VdZ8vIXZL79KhMFAVFQ0+rAwHhwxqthrr27VmgYNG+Udo4SqOicnm159Bnjkmq2nFxnx5r3YQggh/I9T16jdrehkMij5+upby5KY+NTjWCwWIG/xkleWvOEwdIu2LeqrnfsdruFd3mu73nzgRrBefy6NVNPlIxW1c6SiLptU1GVzZejbo9eovcHR9dXU1BQmT3jKLnhNJiNPPja8WAWbmprClInjSgxpgD27fyy2zdkVvYpWzu5exawscv1ZOENCWojg4zdB7ch/R4+g1WqLbddotMUmUzkzKa3lNdfaBa6zYesozF2Z5OVLgbr+t1TTQgiRx6+DumZCbYcVstVqKTaZqqRJaQUUjYYd339tF7hvL3u9zLAtKcwjo6L9fpKXrP8thGMy7C0CiV8HdXx8JV5etBRdoTDV68NIXLS02BBw4UlXkZFRxY4VFRnFc8+MtQvcV16aiclotGtXNGxLqpyzMjP8epKXt4fm3UmqaSGEuMjnt2eVpeA2rF/37+W/Y8fIzcmmSbMWZbYdek8fu1XJTCYjer3e7gEeYfowRo4eyyuJs0pcMrS026OubtXadouYv03yCtT1vyWky0+uTwt3kolkZfPGPdTgpxV10euq8fGV2PLZJ4x7fASTxo+hw3XNmTjuCYevjY+vRMebO5O4aKldtfvCrMRiw+gms4lBQx/kp18OseqjTfz0y6Fis7bLuj3KXyd5hfr910IIESz8rqJ2dMtTk2YtWLZ0iV27ZUsXM+TBEQ5vtwL7BVEKqt0KFS5jzGPD0Wq0WKyWYoFbEkfH8ncFXzD88QEjJZFqWniDXJ8WgcavgrrwddWCIdsnRz3EpKkzHLbfs/vHEoMaHD1eUkUBUMDxwzhL5ulHVXpCIH3BkJC+NDLsLUTw8quh75ImblWqXMVh+5bXXOv0sW1fAnJyyMrMJCcnJ2AmV10Kfx2aL0xCWgghSuZXQV3SddXr23dg6PCRdtuHDh9ZajVdlMP7m9UStgshhBB+wq+CurSJWzPmzuernfuZv/h1vtq5nxlz57t07Mio6GKPxczJySYyKtqdH0G4yBfV9Nm0VH7f/zNn01K9/t6eIMPewt1kxrd/8atr1FD6ddUGDRu5VEUXlpWZQXhEBLmFbtkKD48gq8gTuoT3+CKkt3y8hpkTR6PT6TGbTUycuZDO3fp4vR/CN2QimXAXb92aBX4Y1OCZiVs1E2qjKPZTyBSNIrcr+YivKumZE0eTm5NNLnmjKzMmjKJ1uw7ExMV7vT/uINW0EMHPr4a+XeHqGtbyuEhxIvkoOp39ZEWdTseJ5KM+6pEQQpTNLyvqspT38ZKBdLtSMPPVLO9qNRIwm+0nK5rNZqrVSPBJf4R3ybC3CFQBV1Ff6hrWgXC7UjDz5a1YMXHxTJy5kPAIA1HRFQiPMDBx5kIZ9haiEJlI5n8CrqIO1DWshX/cL925Wx9at+vAieSjVKuRELAhLYQIHQEX1LKGdWDyh5AuEBMXH/ABLdW0EL7jzRnfEIBD3zIpLPD4U0iL0CTXp0UgC7iKGgJvUlhqakrA9NXdJKSFEOLSBFxFXSBQJoWtW/M+bZrVo3/PO2jTrB7r1nzg6y55jYS0Z8iwt/AUmUjmnwI2qAPBpc5QD2QS0sJfyLC3CHQS1B5U0tPAgv1BIBLSniPVtBChR4Lag0JxhrqEtBAimJV3xrdqzACILM9rgyaoXV1S1Bu8NUPdXz67hLRnSTUtPEmuT3uO+cQecr+eAdCgPK8PyFnfRZV3SVFv8PQMdX/47BLQwl/J9Wnha6oxA/Nvq8FqAtCW5xiKqqru7ZUTWrS8Rt28fYdbjpWamkKbZvXsViqLMBj46ZdDfj8j/FL5w2eXkPYOqabLR4LaeVJRO8fVoW/r+WMYdyWBJe8Ry6qqKmW8pJiAH/oO1Qlb4PvPLiEthBClUwwxoFou6RgBH9ShOGGrgK8++z8pmRLSXiTVdPlINe08qaadU56JZEpYNLom/UCjByhXYgd8UIfykqK++OwS0EII4RpdtZaE3zQR4GC5Xu/e7vhGoC0p6k7e/OwS0t4n1bQQwUEJiwbIKs9rgyKoIa+6DKWALszTn10CWgQaGfYWwSRoglq4nwS0b0k1LbxBrk/7v4C/Ri08Q0JaBCqppoUnePsZ1IVJRS3sSED7B6mmhRAFJKgFIAHtTySkhRCFSVCHOAloEUxk2Ns1cn06MIRMUKempoTk7VslkYD2T1JNC+F/fHl9GkJkMtm6Ne/Tplk9+ve8gzbN6rFuzQe+7pLPyKpiQggRWII+qFNTU3hy1MPkZGdzIT2dnOxsnhz1kM8fCeltEtD+T6rpSyPD3q6RYe/AEfRD3wUPrij8hKmCB1cE+xC4BHPgkJAWQpQk6IM61B7aIeEsQpFU08JTfH19GkJg6DsUHtpRMKwtIR2YpJoW3ibD3oEl6CtqCL6HdkggBw8JaSFEWUIiqCHwH9oh4SyEYzLsLYJdyAR1IJJwDm5STQshnCFB7YckoIOfhLR7SDXtOrk+7Tx/mEgGEtR+tWKZBLQQQoiign7Wd2n8ZcUymbEdWqSadg+ppkWoCNmg9ocVyySgQ4+EtPAlGfZ2nr8Me0MID337asUyCWYhhBCuCNmg9vaKZRLQQqpp95FhbxFKQnbo2xsrlsmKYaKAhLTwNRn2DlwhW1GDZ1Ysk1AWRUlIu5dU08LT/On6NIR4UIN7ViyTcBYlkZAWQlyqkA9qKN+91BLOQnifVNPlI8PegS3kg3rdmvd5ctTD6PV6TCYTiQuT6NV3QLF2EszCVVJNCyHcIWQnk4Fz91LLZDBRHhLS7ifVdPlINe0af7s+DSFeUZd0L/XOfX9wVfNIH/ZMBDIJaSGEO4V0Re3oXmqjyUS1Ggk+6pEIdBLSniHVtAhlIRvU/6RkckGNZMKMhYRHGIiKrkB4hIGJMxcSExfv6+6JACQhLfyNDHu7xh+HvSFEhr5Lu8bcuVsfWrfrwInko1SrkSAhLYSfkWpahLqgCepLmfAVExcvAS0uiVTTQghP8augltnVIhBJSHuOO6vpimHQupKGBjFaIjSq247rr0wmKzSu5utuBAyLyQR3tXeqrYpKRo6F7w+cZt2OZE6ey/Fo33wS1EazVUJZBAUJ6cBQMQzuqa+jRpVKhBmiULQ6FEXxdbc8KivHVHYjYWPKdiFsVZVKqpU6NavQrlElnl6+16NhHbKTyYS4VBLSnuXOarp1JQ01qlQiosLlaHR6CWlxaRQFNFqUsGiuqFWVXm1rePTtJKiFKAcJac9y9wSyBjFawgxRbj2mCB4uVdNFKDoD1zeu7MbeFCdBLYSLJKQDT4RGRdH61ZQcESwUDdERWo++hQS1EC6QkPY8T92OFezD3QVk2NvLFAUFz/5tSVCX09m0VH7f/zNn01J93RXhJRLSQghfkKAuhy0fr6F3x+Y8PrgXvTs2Z+sna33dJeFhEtLeIYubXBqppl13KdenvUWC2kVn01KZOXE0uTnZZGakk5uTzYwJo6SyDmIS0iJU/H3wD374+ksupJ93+jVms7nU/RaL5VK7FfJkdoWLTiQfRafTk8vFJ27pdDpOJB+V1c2CkIS090g1fWncUU1//flm5s+cylvrNtPimmvLbJ9+/jwDut7EdTd0YPKs+Wg09rWfyWSi/+3taX9LZ0aPn4JOV3rkfLz2fdLPnycsLAyt1vkJWnf1v7dY+2+/3ErNhDrUubI+SxfOY0niLL797QgajYYVry2i36ChxMbFM/uFiZw/d5ZnX5hLVHS00+/pTRLULqpWIwGz2f7/EGazWZ64FYQkpL1HQtrzDv/1J6vefpPxz88qcWJdWFg4ANEVLnPqmFPGPcap48m0bNOWI4cPoaoqZrMJRaOhfsOreG/Zaxw+9Cc33XIbx/49DIDVasVkMmE05tK8ZWu7461clsTfB/9Aq9Oh0ZQ+QetCerrt5zt79bcLalVVWfHaIo4dOczKjdvRaLRYLBbCwyP45MMPeH3RS/ToOxBTdg57d+3EZDL6bUiDBLXLYuLimThzITMmjEKn02E2m+WJW0FIQloEm6UL5/Hp+jWER0QwZuLzQF6gZWZcIDzCgFarRcmviHV6fZnHe+nF5/hi0ydcHhPLjGefIjc3h+gKFTDmGqnX6CqeeWE2r86dTlR0BdauXMHy1xYSXaECiqLBYrFgNpv46a+Tdsd875MvSn1PVVX59sutLF04j/0/7+LGTrfS996hhEdE2LVTFIVX3niXPrfdwGcfrUUfFoaiKGg0Gt5cPJ9eAwZRrUYtzqem8c/hv7h/2EhXTqXXORXUiqK8AVwFbFRV9UUH+ysC7wNaIBMYoKqq0Z0d9SfyxK3gJQHtfVJNXzpnhr0nzUjk74N/sPx/C6hdtx69B95HWsppbmndqFjbHh3sK90217fn9fc3AJCdncWMZ59iw5qVPDbuWYaPeooP33+bFyeMYcNXu4mNiyfl1EkGdu1IjYQ6vPPRFoxGIze3asBj4yZx95CHXP58aSmn+fSjNax9bwVH//mbO3r04blZ86nf8CqH7f/8/Rd27fie/oMeICIigp3f7URRFNa9/zY3334nOr2erRs/QqtoMJtMXH/TzXavN5tMWKx5Fbg/KDOoFUXpDWhVVW2nKMqbiqLUV1X1ryLN7gUSVVXdqijKEuAOYIMH+us35IlbwUdC2vskpL0nKroCC95cyb3db2X6s2OpVfsKmrW8hilzFhAREYFGo+X7r7/go1XvMvHFucTGVQJg+qSnCAsLsx1Hp9NTq05dnp0+j/73DQPg2nbtCY8wcOjPA1x7fXuO/PM3XXr2ZcB9w4iKrkAU0Lxla9LPOzdJ7bvt27i+wy22IfqXXnyOzZ+so889g1m0fBU1E2qXOont74N/8P6KpYSFhXH2TBppKacBWPX2m1hVKxazmeQj/xIVXQGAB++5q9gx7r7/QcY+O82p/nqaMxV1R2BV/s9bgBsBu6BWVXVxoV8rAafd0TkhvEVCWgQqVyaRVa1ek5deW8GkMY8QX6kyEREGeg+8z7b/9KkTAHS67U4qV8178lbi9OfQFlrVTa/XM/SRxzHm5mAyGtGHhVGzdh227/nLNgS9/H8LyLiQzlPPXRyAXbFuM5A3fG0yGlFVtdiQNcA/hw4yauhAbrrldmYuXIrBEElMbByVq1Rl4rS5AGzf8inzZz3P0pUfUalK1WLH6NqzH1179uNE8jEG9ehMxctjyLiQzrTEV0lLSaFt+47kZGTS9aaWdO7Sg4dHPQXAX38eYMKYh3nxpcVc3aqN0+fV05wJ6iggOf/nM0CrkhoqitIOiFFVdYeDfQ8BDwFUqV7T9Z76wNm0VBneDgES0r4h1bRvXN36OtZ9vgN9oSq5gMmYd8WyaIAWnc3943dfMfL+fmW+V4uEmBL3DR81lsfGTbL9viJpEarVypARo1m0YhVjHx7MsH7dWPLOWrtr5qvefpPZU8bTsElzMjMzWPvybAxRUQx+6DG74/+2bw9PDB9ErTpX0L5TZxbMmcbnn33C8tcWsnjZB6SfP0daagqVq1ajzpX1Afj3n78BuKppC6r6UU45E9QZgCH/52hKuPdaUZRYYCHQx9F+VVWTgCSAxs1a+v3DYLd8vIaZE0ej0+kxm01MnLmQzt0cfjQRwCSkRSAr7y1ZjkIaIDsr7/HDjiZnFdbquuvZ+M0e9OFhtpnihU156jEyLqTz0mtvFdtntVrJzckmMsp+lvXnn23AYskL6utvupmXk95mwewXMBgibe9/Ji2VxOmT6XJXXybPmk9YeDjbPttAVFS0LahVVWXhnGmseG0hbdt3ZO7iZax6+00AHhj5BL//speXZz1PdP4s74MHfrP1IfX0KRRFsY0m+Atngno3ecPdO4AWwJ9FGyiKEgasBiaoqnrErT30gcKLmhTcLz1jwihat+sglXWQkID2LX+rputVLvnWnNPzFpB+/wMAXPbWm1R+anSJbQ+dzrD9XPPWG4nYv9dhu/P3DSHlpUUAhO/bQ63O7Us85rGt35DbomWp/XdV0oJ5DB0xmr//+pOc7CzCwsLRaLUk/3cUgH//PmRrazKauHAhnd/378WqWmnaohUGQyQ1a9fhvyP/kpWRUez4RqMRs9nEuTNpxfZptFpqX3Flse06nR69/uIXgrbtO9Lq2naEhV/8IhAbF8/b6zdTv1ET27bIqCj0hdooikLH27oSHmHgwcee5OTxZI4d+YfRTz+HotEw45XX+Onbr3ni4fto0Lgpv/+6D4vFglar5fSpE1SuWo2ICAP+xJmgXg98oyhKdaALMFBRlBdVVZ1UqM0w8obEn1UU5VlgiaqqH7i/u94hi5oENwlp3/K3kA5U5a2md373Na/Om47VYuGnH75h147virUZ0OUmu99TTp/k7m6dqF6zFp99v9+2/ZH7+3I0f7jYkZ43X1ds2+UxsXy1r/hrNFotqtVqt+3rL7bQuu0Ntt8P/XmA1e8uZ/zUWbb7pvX6MDSK/UBvvYaNqdegEVarlW2fbeDDlW/x1vot6PV6MFuIrnAZ7W7syIOPPsmwu3tw4Nd9NG3RioN//EaDQl8C/EWZQa2qarqiKB2BzsAcVVVPAvuKtFkCLPFID31AFjUJPgXzDZJ1FYi+PM7X3RF+pnAlXJr0+x+wVddl+W/bt061y23R0un3d4ekBXOJrlCBAYMf5PbuvTAacwkLC0dRFIb06cLZM2k0bNKMeUuW216jqirG3OJrYhsMBjrd1pX5r79r25aWmkL3m66haYtWJK1cb9d+/sypbNrg+NkICgoF10RNJhOvzpvO8v8tsDv2Tz98wwcrXudMSgozFySVOIQ/bcIYPl232m7boB632n4Oj4hg6/e/EmEwEFepMts2fUzjpi34Ze9u7vPDe6qduo9aVdWzXJz5HfRkUZPgUjDfQNHqsJhN9H96Fq1u7e7rboUkqabdo7zV9LdfbmXXD9/y6FPPEhMbR0zsxS+tmz9ex9kzabRs05Y9P+3g4O+/cmvXHqUf0MEKZ7OnjCcz4wKHDh7gTFoqsYX+u5l+7hyGSMeXGQquQ+/89itmTXmGUyeSmZa4mI6du7B3104A7h7yEEajkcQXnyMnJ5uXk952eKynJr3I4+Mns3vn90x8/GHeWPUJV+ZX2Hd37Uizq68hMioKgNvv7MnG9atp2rwV58+dtavg/YWsTFYCWdQkOJxNS2X6hFGYClUDq+Y8Q4PW10tl7WUS0r6Vk5PNrMnjiYmLZ9CwEcX2/e/l2VSpVp3Fb62m3+3tmfP8BJq3alPqxCqT0f4LQ9KCeWz5ZD2VKlcl5fRJRg0dyOK3VnP61AmGD+jB2TNpdLr9TofHUtW8evrXfT+DqrJy45e2a9lZmRm2LwWDH3qM7MxMlrw8i48/dHyFNa5SZVRVZeXypTRp3pKGVzWlwmUV2bj2A06dPM6cYW/Y2t4zeDir3l3GCxPH0KBRE5o2d+98AHeQoC6FLGoS+Lbs/RWtTm8X1FqdjjMnkiWoRUiZP2Mqx478wxMTphabcT33+YkcPvQnM155jcioaB5/ZgrjRg7l4Xt7s2zNRi6PiXV4zF4DBxGfH4qLE2eS9MpcRo6dyMHffyX52BEsZjP972jPczNfps89g6lwWUX63jvE4bHU/IHv+x4cSb9BD3BZxYp8++VWvtv+OZ+uX203gWzEmPFUr5lA974D2VhCWKelnKZWnSv48duvual5Xeo3bsLpE8dp0aoNjZs2t7WrWr0m7Tt15sstn9K99wBXTqnXyGMuRVD64fgZfjh+hthqNbAUmW9gMZuJrVbDRz0LTVJNu095hr2zsjL5Ze9uKl4ew4DBD9rtWzhnGmveXU633gO4s1d/AG7r1pMhI0Zz+K8/uPvOjnz75VaHx71/+KO0bd+JJx681xbSDz8+DoDLKl5O0sqPqFO3Po8O7s+Rw3/Tsk3bEh/4UTCRLCw8nMsqVgQgJzublcuTSLiiHmOfs1+9uke/u0t8uAhAfOUqzHwlic93/0HSyo84+s/fGHNz2ffzT/S67Xp+3b8HgM0b1/PNl1vR68NYvnQRf/9V7MYmn5OKWgSdwrO6oy+Po//Ts1g15xm0Ol3eN/ynZ0k17UUS0r4XGRnFW+s2s//nn4iMzLs2eyH9PLMmj+eTDz/guhs6MGlmot1rHn9mCmazmXdeX8yjg/vT5vr23NqlO3f26k+FyypiMhpZu3IFSxJnkZOTw6yFS+lyV18grzpWVZXLKlbkf+9+yMrlS3l13ots/fQjGjRuwk233E6zq6/hho632iaEWa1WcnNz+efQQVsfEq6oy5urN9qupRfeVyA7O5vo/KVAPk/99QAAGJFJREFUi8rJyeaTtR+wJHEWCXXqkrhkBcbcXFa98yZxcfFMf+4p1q16lzt79uO+YSMZfm9PHr6vNy++tJi2N3S49BPvJhLUIqg4uvWq1a3dadD6es6cSCa2Wg0JaS+SkHavS3nmtFarpWWbtgD88PWXTBrzCKkpp+h0W1dmL3rD4Wpk4yZPp3XbG5jz/AR++v4bFBT63DOE1e8sY3HiTM6kptDq2nZMmbOAOnXr2V5rNplsd84oisI9Qx+ia8++LFvyCmvfW87rixIZOGQ4HW/rantNbm4uv+372eEtXWW55rrr7X7fu2snq99ZxlfbNqHVahkyYjQD733AtsJZfOWqDOp9O2aTiacnz6D/vUMBePXN93nykSE89sBAHnliPMMeecLlvniCBLUICmXdGx19eZwEtBD5mrW8hrr1GzJ89FgGDh5eattOt3XlpltuZ+vGj6hdtx56vZ7bu/Xiu68+55Y7utG9z8Bir8nNySE3x/52rstjYhkz8XlGjBnPlk/Wc3v3Xnb73/v483J9lmH9u5GdlWW3rV7Dxpw/d4bR45+jW+8B6DX2Udeg0VV0uOUOHnn8abu1wq9qdjXvb/icN/73CoMesJ9w50tKwUw7b2rcrKX65rovvf6+IvjI4iX+y5+q6THNddS4or6vu3FJLqWaDnWm7OL3gLtT6vEj9Jz5TZntcraM262qausyGxYhk8lEwJKQ9l/+FNJCBDoZ+hYBRwJahBqppsvP09W0N0hFLQKKhLT/k2ravSSkhVTUIiBIQAcGCWnhT4KhmgYJauHnJKADh4S0+0k1LUCCWvgpCejAIiEt/E2wVNMgQS38jAS0EHmkmhYFJKiFX5CADlxSTQvhWTLrW/ichHTgkpD2DKmmL00wDXuDVNTCRyScA5+EtAAw5uaiDwuze5LV+lXvcv7sGQY/PMq27UxaKrFOPjY4KyvT9vCQwlRVLfWJWcFKKmrhVQWPnxSBTULacwKpmjaZTIwaOpCXZ0y2275143rWrnzLbtuY4YN45L6+mEylf77kY0e57dqrWPzSzGL7Xps/h7aNavLh+2+X3Kcgq6ZBKmrhJRLOQvjejm+288veXej1YU5Xpqqq5j3DvVJleg0YZLdPr9fTrFVrli6YR/1GTWwP6NDrw9DnP6kKYPfO79i7aydPTJhqt92RzR9/yIX0dKpUq05WZgbhEQa0Wq2tL9lZmTRo3MSuf8bcXDQaje2RmcFGglp4lAR08JFq2nM8XU3v2vEty5a8gk6nR9HYD6haLGaMublERBjs9qlWK2aLmauvubZYUAM8MuYZdu/4jqhCz4TWaLVoCh1jwexptLq2HUNGjC6zj5s2rKVajZp0uasP7RrXctjm3u63FNs2a9Hr3Nr5zjKPH4gkqIXbSTgHLwlpz/HGkPfIsRN5bNwkh/s+Wv0ek8c+yop1m2nUpFmx/Var1fbzyuVJzJo83m7/zz/+UOw1LRJi7H6/unas7efR4ycz7NExdvu/2raJP3//lScmTMUQGcU7G7YRYTCgUTRoNBoWzZ3Ots82sGbLt+h0eZW52WImNyeHGrVql/HpA5cEtXAbCejgJiEd+DSa8k9LKvzaCEMkAEnvrady1WouHSczM4N7u99iO0Zhr82fA0Db9p1QFIVmV19jt99sNhEVXYH6jZoUey0E5/VpkKAWl0jCOTRISHtWIE0gA9Bq8q4Z16x9BTGxseTm5jr1uvDwcMxmi8N9G9et4rf9ewDsrp93bFmfs2mpdm0LV+pXNmjEh9t+CNqQBglqUQ4SzqFFQjr4PHxvb2Lj45n5SlK5Xp+dnWn7OXH6ZFa/s8yp1/W/7wFGPZ03QzwnO8u2/dzZM8ybNgmtVovFYh/kBoOBNt16MX5q8Vngs6dOIPnov+X4BIFFglo4RcI5NElIuy4tNYXkY0epUSuBuPhKZbb3RTX998E/yMyo4XCfyWQkN+didaqiYjIaCQsLJzwiAoAe/e7hlju6ExMXT4QhkkpVqrHknTWlvucjg/oSYYjksooV2X04xTaT22q1Mnnso5xNS2XQgyN5e+mrdq/TanWYTEYupJ932FeNVhvU1TRIUItSSDiHNglp121cv4bnn3mS2rVrc+TIEabMSuTOnn1LbO+rIW+9XmcLyqIG9bjV4fbp8/9Ht94DADAYIjEUusas1WqoUtVx8BduU0Cnuxg9ZpMJq9XC3UMeok27G4sFNcCXmzfy5eaNDo/brGXrUt83GEhQCzsSzkKUT1pqCs8/8yTbv/yS5s2bs3//fjp26kTbGzs4VVn7i0XLP6Bu/Ua231VVxWTMJS6+ssP2OdlZnDyeTPtmdco8duHh7gJh4eHMXbIcnVbH919/4fB1PfrezbTExcW2P/fkSA7/9WeZ7xvoJKiFhLMoRqpp1yUfO0rt2rVp3rw5AM2bNychIYHkY0cdBrW/TiCrVKUaNWolON3+iQlTGfGE/a1az49/nORjR0h6b73d9giDweExDA5mgBe2Yc1KNqxZ6XBf0xatnO5roJKgDmES0MIRCenyqVErgSNHjrB//35bRX306FGXQi+QGHNzST52xOE+k8mE1Wotdl35Qvp5Uk6dpEq16kRGRTv9Xp1uv5PHx08utn3+jCmkppx2reMBSII6BElAi5JISJdfXHwlpsxKpGOnTiQkJHD06FGmzEoMqGraFceTj9Hz5utKbVPS/gVvrqTDrXc4/V56nZ7IqOIP6ShY9CTYSVCHEAloURoJ6Ut3Z8++tL2xQ6mzvoMhpAHC8tfVnjL7FXrffb/dvrEPD+bYkcOs2vSN3faff/yBoX27OlzspDRbNq5ny8b1DvfJ0LcIeBLOwhkS0u4TF18poCaPlVe5VjlT1XK9tmuvfjw3I9Fumyk7l5lTnuaY3EctApUEtHCWhLT3+LKaXvHaQrIyM9HqdFxIT0dVVZIWzLPt/+O3/QB8+P5bxFeqYttutVoxm4yYjEZuvPk22rS7EQCLxYqzvtu+DbPZzKYNawEcPmu64L0g7/7oX/f9jMEQidlsIjsri1MnjtvamXPyVkLLzs7CmJvL4UN/kp2VTeOmzS9pmVR/JUEdRCSchaskpL3H10PeG9as5NSJZLTavHuos7OyePeNJXZtLo+JZfOGD4u91mKxYMzNJbZSZVtQm0xG4ipVdjiTOzs70+4hHh+ufJttn21Ap9fTtVc/Gjdr4bCPxvylSC+kn2fU0IEYDAY0Gi17fvyBIX262Nqp+ZV5gQcG9iAnJ5svdh5weC070ElQBzgJZ1FeEtKhZe3W7916vDp16/HFbsf3MGdeuEB21sV7pp+cNI1hj47hivoNSr0Vy2jMC2q9PozdfzuezR3sq5A5IkEdoCSgxaWQkPYuX1fT3rZi3Wa732vUSnDqNrXufQbSvc9AT3UrYElQBxAJZ+EOEtLeFWoh7UmhWE2DBLVfk2AW7iYhLUTgkaD2MxLOwlMkpL1Pqmn3CdVqGiSo/YKEs/A0CWnvk5AW7iJB7SMSzsIbJKBFMAjlahokqL1Kwll4k4S070g1LdxJgtrDJJyFL0hI+46EtHuFejUNEtRuJ8EsfE1CWojgIkF9iSSYhT+RkPatUKymjbm56MPCUBTFtm39qnc5f/YMgx8eZdt2Ji2V2Lh4p46ZlZVJZGRUsWpaVVW79wkVwbd6uYf9cPyM3T9C+AsJad8KlJB+b1kSLRJiXPrnRPIxh8cymUyMGjqQl2dMttu+deN61q58y27bmOGDeOS+vphMpZ+n5GNHue3aq1j80sxi+5a+mkj7lleyfvV7Ln7qwCYVdSkkiEWgkJD2rUAJacD2EI2Xl77DFVfWL7Xt2pVv8fbSV6kYE+twv16vp1mr1ixdMI/6jZrYlv/U68PQ6/W2drt3fsfeXTt5YsJUu+2ObP74Qy6kpxMfX4mszEzCIyLQarVAXkWdnZVF/YZX2dqrqorRmItG0aDPf0Z2sJGgRgJZBC4JaOGqgtCrXjOBK+o1KLVtTGwckBe8JXlkzDPs3vEdUdEVbNs0Wq3d4yYXzJ5Gq2vbMWTE6DL7t2nDWqrVqMntd/biplb1HLYZ3K9LsW3TE5dw+509yzx+IAqZoJYwFsFGQto/BFI1Xdjx/44SHh5eapuzZ9IAMJtNdpXwyuVJzJo83q7tzz/+UOz1LRJi7H6/uvbFynz0+MkMe3SM3f6vtm3iz99/ZdRTkzBERrJ89adERBjQaBQ0iobFr8zmi80beX/DF+h0efFltljIzcmhRs1aTnzqwBRwQS2BK4SEtL8I1JAGmDx2JKCgqlZUFaxWK6rVilW12n4ueO7zuTNpGGpcfDxlRP6jKpPeW0/lqtVcet/MzAzu7X6L7RiFvTZ/DgDX3XATiqLQtHlLu/1mk5moqGjqNWzs0nsGOp8EdYbJLIErRDlJSAt3eP2DT2jUpJlTbX/bt4eUUydp3qoNAFpN3vB5zdpXEBMbS25urlPHCQ8Px2y2ONy3cd0qftu/B8BuZnfndk1tlX2B1g0vfjmoW78hqz7Z7tT7B6qAq6iFCGUS0v4jUKvpgmvHB37dR72GjW1DyCWxWq2sfW8FH3/4Pp99t4/4ylXIzs607U+cPpnV7yxz6r373/cAo57OmyGek51l237u7BnmTZuEVqvFYrEP8giDgc5dejD22WnFjvfS9OdIPnbEqfcOZBLUQgQACWj/UlpIn0lL5fh/R6leM8Hp+4a9qcU113J5TCxTx41i6rhRZb+AvAr30acmEl+5CgA9+t3DLXd0JyYunghDJJWqVGPJO2tKPcYjg/oSYYjksooV2X04xTapzWq1Mnnso5xNS+WeIQ/x7rLX7F6n1eowmYxkpJ8vdkyTyYgm/zjBTIJaCD8nIe1fSgvpTz9aw/PjRqPT6zGbTEydu5Aud/XxYu/KllCnLl/8fJD08+ecfk14RASRkVG23w2GSAyFrjFrtRqqVK1R6jG02ouzwAtX8WaTCavVwoBBD9D6uhuKBTXA9m2b2L5tk8PjNm3RyunPEagkqIXwYxLS/qWsSvr5caPJycmGnGwApo4bxXU3dvC7ylqr1RITG8eiedP5eef3vDDvVWrWrmPb/8ve3Tw9cij3P/QYdw95qNRj5WRncfJ4Mu2b1Sm1XUHbosLCw5m7ZDmq0cyO775y+LpuvfozddYrxbZPfeZx/j18qMz3DXQS1EL4IQnowHP8v6Po9HpbSAPo9DqO/3fUL4I6KysTvT4MnU5nm6yVnZnJnp92EF+lil1brUbL8f+O2e6ftlqtGI25mE0moitcZtf2iQlTGfGE/a1az49/nORjR0h6b73d9oLFVorSoYFSFiv5ZN0qPlm3yuE+qaiFEF4nIe2fypo8Vr1mAuYiy2OaTWaq10zwZLecNqxfN37/Za/Dfdc1qO5w+7QJY5g24eK9znGVKvPF7j+BvDW+S5rIZTKZsFqtXChyXflC+nlSTp2kSrXqREZFO933jrfewWNPTiy2fVHiDFJTTjt9nEAlQS2EH5GQ9k/OzPCOjYtn6tyFTB03Cp1eh9lkZurchX5RTQM89Pg4srMy0Wp1tpnfc1+YSHzlqgwtsmLY8f+Okjh9MgMGP0ibtjdisVgwGY1oCl1nPp58jJ43X1fqe5a0f8GbK+lw6x2Ac4+x1On0GKKiHG4PBRLUQvgBCWj/5cptWF3u6sN1N3bwy1nfnW7ravf7v4cPcerEcQY9OJLOd95lt++P334BoEnzlsX2FQjLH6qeMvsVet99v92+sQ8P5tiRw6za9I3d9p9//IGhfbvaFjtx9lnT2zZ9zLZNHzvcJ0PfQgiPk5D2X+W5Vzo2Lt6vAtoRq9XK9IljMURG0a33gHIdo/Ba3k7LX+nM1dd26d6bCc/PKbZ95pSnOXb0X9f7EWAkqIXwEQlo4QsHft3P/JlT+fH7r3nmhdkOv1RY8xcdsVqtJR7HYil5X1Hfbd+G2Wxm04a1AA6fNZ13zLz3NZlM/LZ/L4ZIA2aziezsLE6fPF6sfXZ2FsbcXA4f+pPsrGwaN21evi8Qfk6CWggfkJD2f4G68lhJ9u/ZxfNPj+bQnwcICw9n0oxE+g0a6rCt2WLO+99Snh1tMhmJq1TZ4Uzu7OxMu5D/cOXbbPtsAzq9nq69+tG4WQssucbixzTmbctIP88TI+4nIsKAVqtlz66dDLvH8RA8wAMDe5CTk80XOw8Q6eBadqCToBbCiySgA0OwhTRAs6uvoUq16lxxZQNGjp1A3foNS2ybm5NX7RpLWcO7Tt16thngRWVeuEB21sV7pp+cNI1hj47hivoNMBgiS7w2bTTmvZ9OH8aOX4+W+ZlChVLwdBRvqtWomTom6SOvv68QviQh7TtjmuuocUV9p9oGY0gXsFqtPh8adnYCWSBJPX6EnjO/KbNdzpZxu1VVbe3q8aWiFsLDJKADRzCHNJRzApjwOfm3JoQHSUgHjmAPaX8QjNW0N0hFLYQHSEALYU9CuvykohbCzSSk/VNp83GkmhblpqqoeHaul1TUQriJBLT/yrEqqBYzioMlJyWkPS+oq2nVSkaOxaNvIUEtxCWSgPZ/B89aqFE5k4gKl9ttl5AWl0o1Z/P9Ac8+GESGvoW4BBLSgWFXipXkUynkXDiH1WxCVVUJaS8JympaVcFqQTVm8M+xk6zbkezRt5OKWohykIAOLOeN8N5fZlqfO0WDGC0aiwXF150KAZZSVjYLZCoqGTkWvj9wmnU7kjl5zrNfRiSohXCBBHTgOm+Ez5OtJG454euuhIyTvx/wdReCggS1EE6QgA4O+3475esuhAwJafeRa9RClEFCOjhISHuPhLR7SUUtRAkkoIOHhLQIZBLUQhQhAS1E+Uk17X4S1ELkk4AOTlJNe4+EtGc4dY1aUZQ3FEX5QVGUSZfSRnhHxrk0jh7YT8a5NF93JSB8ffCMhHSQkpAWwaDMilpRlN6AVlXVdoqivKkoSn1VVf9ytY3wjp+3bWDVnAlodXosZhP9n55Fq1u7+7pbfknCObhJSHuXVNOe40xF3RFYlf/zFuDGcrYRHpZxLo1VcyZgys0hJ/MCptwcVs15RirrIqSCDn4S0t4lIe1ZzlyjjgIK1kc7A7QqTxtFUR4CHsr/NXdshyt/da2rwgmRQANAW7DBlJtjmXLXtQeBLJ/1KrjFA6m+7kSQk3PseXKOvaNheV7kTFBnAIb8n6NxXIWX2UZV1SQgCUBRlF2qqrZ2ubfCaXKOvUPOs+fJOfY8OcfeoSjKrvK8zpmh791cHMpuAfxbzjZCCCGEcJEzFfV64BtFUaoDXYCBiqK8qKrqpFLatHV/V4UQQojQU2ZFrapqOnmTxXYAnVRV3VckpB21OV/GYZPK1VvhCjnH3iHn2fPkHHuenGPvKNd5VlRVdXdHhBBCCOEm8lAOIYQQwo9JUAshhBB+zKNBLUuPel5Z509RlIqKonymKMoWRVHWKYoS5u0+BgNn/04VRamiKMoeb/UrmLhwjhcriiLL7ZWDE/+9iFEU5VNFUXYpivKat/sXLPL/O/BNKfv1iqJ8rCjKd4qiPFDW8TwW1IWXFQXqKopSvzxtRMmcPH/3Aomqqt4GnATu8GYfg4GLf6fzuLimgHCSs+dYUZT2QFVVVT/2ageDgJPn+D7g3fx7qisoiiL3VrtIUZQYYAV5C4GVZBSwW1XVG4C+iqJUKO2YnqyoOyJLj3paR8o4f6qqLlZVdWv+r5WA097pWlDpiBN/p4qi3AxkkveFSLimI2WcY0VR9MBS4F9FUe7yXteCRkfK/jtOA5oqinI5UAs45p2uBRULMABIL6VNRy7+u/gaKPULkSeDuuiyolXK2UaUzOnzpyhKOyBGVdUd3uhYkCnzPOdfUngOeMaL/Qomzvwt3w/8DswBrlUUZZSX+hYsnDnH3wK1gdHAgfx2wgWqqqY7cYuyS9nnyaB2y9KjolROnT9FUWKBhUCZ10KEQ86c52eAxaqqnvNar4KLM+e4JZCkqupJ4B2gk5f6FiycOcdTgBGqqr4A/AEM9VLfQo1L2efJYJSlRz2vzPOXX+mtBiaoqnrEe10LKs78nd4KPKooynbgakVRXvdO14KGM+f4EFA3/+fWgPw9u8aZcxwDNFMURQtcB8hCG57hUvZ5bMETRVEuA74BPid/6VGgX+FVzRy0aevEkIHI5+Q5fgSYAezL37REVdUPvN3XQObMeS7Sfruqqh2918PA5+TfcgXgTfKGCfVAX1VVkx0cTjjg5Dm+FlhG3vD3D0AvVVUzfNDdgFfw34H8uStXqaq6qNC+2sCnwDbgevKyz1LisTy5Mln+7LfOwNf5w1XlaiNKJufPO+Q8e56cY8+Tc+w/8p+NcSOwuawCVZYQFUIIIfyYTN4SQggh/JgEtRBCCOHHJKiFEEIIPyZBLYQQQvgxCWohhBDCj/0f4AjtQclvjr4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3dec2aa20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#将Sales和Profit合并成一个两列的numpy数组\n",
    "X1 = df['Sales'].values.reshape(-1,1)\n",
    "X2 = df['Profit'].values.reshape(-1,1)\n",
    "X = np.concatenate((X1,X2),axis=1)\n",
    "\n",
    "#设定异常值比例\n",
    "outliers_fraction = 0.01\n",
    "xx , yy = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))\n",
    "\n",
    "#定义CBLOF模型\n",
    "clf = CBLOF(contamination=outliers_fraction,check_estimator=False, random_state=0)\n",
    "\n",
    "#训练数据\n",
    "clf.fit(X)\n",
    "# 预测异常值分数\n",
    "scores_pred = clf.decision_function(X) * -1\n",
    "        \n",
    "# 预测异常值和正常值的数据\n",
    "y_pred = clf.predict(X)\n",
    "n_inliers = len(y_pred) - np.count_nonzero(y_pred)\n",
    "n_outliers = np.count_nonzero(y_pred == 1)\n",
    "\n",
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "df1 = df\n",
    "df1['outlier'] = y_pred.tolist()\n",
    "    \n",
    "#过滤出Sales和Profit的正常值\n",
    "inliers_sales = np.array(df1['Sales'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "inliers_profit = np.array(df1['Profit'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "    \n",
    "#过滤出Sales和Profit的异常值\n",
    "outliers_sales = df1['Sales'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "outliers_profit = df1['Profit'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "         \n",
    "print('异常值数量:',n_outliers,'正常值数量:',n_inliers)\n",
    "        \n",
    "# 设定一个阈值用以识别正常值和异常值的标准\n",
    "threshold = np.percentile(scores_pred, 100 * outliers_fraction)\n",
    "        \n",
    "#决策函数为每一个数据点计算异常值分数\n",
    "Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) * -1\n",
    "Z = Z.reshape(xx.shape)\n",
    "#在图上对从最小的异常值分数到阈值的范围内进行分层着色\n",
    "plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), threshold, 7),cmap=plt.cm.Blues_r)\n",
    "        \n",
    "#在异常值分数等于阈值处画红色线条\n",
    "a = plt.contour(xx, yy, Z, levels=[threshold],linewidths=2, colors='red')\n",
    "        \n",
    "#填充橙色轮廓线，其中异常分数的范围是从阈值到最大异常分数\n",
    "plt.contourf(xx, yy, Z, levels=[threshold, Z.max()],colors='orange')\n",
    "b = plt.scatter(inliers_sales, inliers_profit, c='white',s=20, edgecolor='k')\n",
    "    \n",
    "c = plt.scatter(outliers_sales, outliers_profit, c='black',s=20, edgecolor='k')\n",
    "       \n",
    "plt.axis('tight')   \n",
    "plt.legend([a.collections[0], b,c], ['决策函数', '正常值','异常值'],\n",
    "           prop=matplotlib.font_manager.FontProperties(size=20),loc='lower right')\n",
    "      \n",
    "plt.xlim((0, 1))\n",
    "plt.ylim((0, 1))\n",
    "plt.title('CBLOF(Cluster-based Local Outlier Factor)')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基于直方图的离群值检测（HBOS）\n",
    "\n",
    "HBOS(https://pyod.readthedocs.io/en/latest/pyod.models.html#module-pyod.models.hbos) 假设特征独立，并通过构建直方图来计算异常程度。 在多变量异常检测中，可以计算每个单个特征的直方图，单独评分并在最后组合。 使用PyOD库时，代码与CBLOF非常相似。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "异常值数量: 90 正常值: 9904\n"
     ]
    },
    {
     "data": {
      "image/png": "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WkREJIYpqEVERGKYglpERCSGKahFRERimIJaREQkhimoRUREYpiCWkREJIYpqEVERGKYglpERCSGKahFRERimIJaREQkhimoRUREYpiCWkREJIYpqEVERGKYglpERCSGKahFRERimIJaREQkhimoRUREYpiCWkREJIYpqEVERGKYglpERCSGKahFRERimIJaRDosW1dFcFsRtq6qvasist942rsCIiL7wl+2GP/SV8G4wQbwDDsXj29Ue1dLpM2pRS0iHY6tq3JCOlgPgRoI1uNf+qpa1nJQUlCLSIdjq7c6LelIxuUcFznIKKhFpMMxiT3ABqIP2qBzXOQgo6AWkQ7HeJPwDDsXXHHgjgdXHJ5h52K8Se1dNZE2p8lkItIheXyjcPfMwlZvxST2UEjLQUtBLSIdlvEmKaDloKeubxERkRimoBYREYlhCmoREZEYpqAWERGJYQpqERGRGKagFhERiWEKahERkRimoBYREYlhCmoREZEYpqAWERGJYQpqERGRGKagFhERiWEKahERkRimoBYREYlhCmoREZEYpqAWERGJYQpqERGRGKagFhERiWEKahERkRimoBYREYlhCmoREZEYpqAWERGJYQpqERGRGKagFhERiWEKahERkRimoBYREYlhCmoREZEYpqAWERGJYQpqERGRGKagFhERiWEKahERkRjWqqA2xjxjjPnMGHNbC4/3MMa8a4z50hgzq22rKCIicujaY1AbY84C3NbascBhxpisZor9HHjRWnsU0MUYc1Qb11NEROSQ1JoWdQ7wSuj7D4BjmymzGfihMaY7kAEUNS5gjLki1OL+cvPmin2sroiIyKGlNUHdGSgJfb8F6N1MmU+A/sBvgGWhclGstbOttUdZa4/q2TNlH6srIiJyaGlNUFcBiaHvk1p4zp3AVdbaGcBy4NK2qZ6IiMihrTVB/RW7uruPAAqaKdMDGG6McQNjANsmtRMRETnEtSao3wR+box5CDgPWGqMubtRmXuB2cA2IBl4qU1rKSIicojy7KmAtbbSGJMDjAfut9ZuAP7TqMwiYNh+qaGIiMghbI9BDWCt3cqumd8iIiJygGhnMpEOwtZVEdxWhK2rau+qiMgB1KoWtYi0L3/ZYvxLXwXjBhvAM+xcPL5R7V0tETkA1KIWiXG2rsoJ6WA9BGogWI9/6atqWYscIhTUIu2ktV3Z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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3defbbd30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "outliers_fraction = 0.01\n",
    "xx , yy = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))\n",
    "clf = HBOS(contamination=outliers_fraction)\n",
    "clf.fit(X)\n",
    "\n",
    "scores_pred = clf.decision_function(X) * -1\n",
    "        \n",
    "\n",
    "y_pred = clf.predict(X)\n",
    "n_inliers = len(y_pred) - np.count_nonzero(y_pred)\n",
    "n_outliers = np.count_nonzero(y_pred == 1)\n",
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "df1 = df\n",
    "df1['outlier'] = y_pred.tolist()\n",
    "    \n",
    "inliers_sales = np.array(df1['Sales'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "inliers_profit = np.array(df1['Profit'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "    \n",
    "outliers_sales = df1['Sales'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "outliers_profit = df1['Profit'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "         \n",
    "print('异常值数量:',n_outliers,'正常值:',n_inliers)\n",
    "\n",
    "threshold = np.percentile(scores_pred, 100 * outliers_fraction)\n",
    "        \n",
    "Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) * -1\n",
    "Z = Z.reshape(xx.shape)\n",
    "\n",
    "plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), threshold, 7),cmap=plt.cm.Blues_r)\n",
    "\n",
    "a = plt.contour(xx, yy, Z, levels=[threshold],linewidths=2, colors='red')\n",
    "\n",
    "plt.contourf(xx, yy, Z, levels=[threshold, Z.max()],colors='orange')\n",
    "b = plt.scatter(inliers_sales, inliers_profit, c='white',s=20, edgecolor='k')\n",
    "    \n",
    "c = plt.scatter(outliers_sales, outliers_profit, c='black',s=20, edgecolor='k')\n",
    "       \n",
    "plt.axis('tight')  \n",
    "     \n",
    "plt.legend([a.collections[0], b,c], ['决策函数', '正常值','异常值'],\n",
    "           prop=matplotlib.font_manager.FontProperties(size=20),loc='lower right')\n",
    "      \n",
    "plt.xlim((0, 1))\n",
    "plt.ylim((0, 1))\n",
    "plt.title('基于直方图的离群值检测(HBOS)')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 隔离森林\n",
    "\n",
    "隔离森林其原理与随机森林类似，建立在决策树的基础上。 隔离林通过随机选择特征然后根据特征的最大值和最小值之间的分割值来隔离观察。\n",
    "PyOD Isolation Forest模块(https://pyod.readthedocs.io/en/latest/pyod.models.html#module-pyod.models.iforest) 是Scikit-learn Isolation Forest的wrapper，它具有更多功能。其代码与之前的CBLOF非常相似。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "异常值数量:  99 正常值数量:  9895\n"
     ]
    },
    {
     "data": {
      "image/png": "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sRnjj/J/1Y4XTmPbInJ4+nDROt2uojYX1n03hqioKAYOHEh5eTnR0dFBVejw4cPZtGkTRUVFpKWl8dprr1FTUxNUxe7YsYPa2lpiYmIwxhATE8Mf/vAHrrzySmJjY+nduzclJSX84x//IC4ujvz8fIYNG0ZRUREVFRXk5OTgcDh4//33WblyJTU1NcydO5ebbrqJmTNnkpKSwpYtW+jduzeZmZkAZGZmMnp4Mv83bRsD4uCzbd8w8Sy49Akr0LYbbriByZMnc8wwN7l5BTxycRWJferWW6clB37PPllZzBkxgttvv50fn346+888kz4ffIDtwhPYs666SVf4ol//kqce/3OTv6nL6cRUFMNhgrorJpV1pM46MUxEOlZP7f1oq7+383khmUz2Rd0+avUh/cEHH/Dll1+yZs0a9u/fT1ZWFuDvjt66dWugst28eTOrV6/Gbrczffp0RowYwbRp06iurub5558PTOjyeDyBirjh5LHa2loOHDjAp59+yoYNGwITyqKiogBIT08nMzOT/v37M2zYMBYuXMjGjRt54oknSEseSFlZWdCEtp35BcweB2eMh9+eC8MHwdwJVUybOpHxxw3n3rtu46EfV7Js7jY23lPF3Cn+3zs9EXJy84Neq7CwkFmzZkHfvvR55x1e7d+bDefA4JVRQX+7zZs2NhvScGj2eHpir6Cveo0nlUVFxxz2WM1wES6T0EREQiUkFbUxJnC6VeNxYLfbzfe//33GjBlDTk4OlmUxatSooHsGDhxITk4OKSkplJaWkp6ezuWXX051dTVz584lOTmZN954o8mBGm63G8uymlwrLi6G2hq2b99OdnY26enpgZ8zMjIoLCykuHgXd51TzYzvTiI9LSmoQgZY8Kxh2fvRpKam4KnNY1TcNv51z6FdyhpK7AOPXNxgn/DcAmz4KCwsJDExkezNm7nRW8PHzUxEXvfFp83+TZ1O52Fnj9eHdU7xQU454xwmTplx2MM+wlF9WKu6FpGeKCRBPWbMGNavXx/YVaxhN3ZhYSE+n4+rr76as846i5NOOonc3FyysrICs7rz8vJwu918+umnQWPI06dPZ9CgQeTn57N9+3aio6ODXnv37t3Y7fYmE8pqampYOtfHxiIfkydPJiUlmYMHD/LdqZMCO489crG/Ir54WtO9vb/Oh2XvRzcZz77tQGWzQQ0wdwqc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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3def22e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "outliers_fraction = 0.01\n",
    "xx , yy = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))\n",
    "clf = IForest(contamination=outliers_fraction,random_state=0)\n",
    "clf.fit(X)\n",
    "\n",
    "scores_pred = clf.decision_function(X) * -1\n",
    "        \n",
    "y_pred = clf.predict(X)\n",
    "n_inliers = len(y_pred) - np.count_nonzero(y_pred)\n",
    "n_outliers = np.count_nonzero(y_pred == 1)\n",
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "df1 = df\n",
    "df1['outlier'] = y_pred.tolist()\n",
    "\n",
    "inliers_sales = np.array(df1['Sales'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "inliers_profit = np.array(df1['Profit'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "\n",
    "outliers_sales = df1['Sales'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "outliers_profit = df1['Profit'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "         \n",
    "print('异常值数量: ',n_outliers,'正常值数量: ',n_inliers)\n",
    "        \n",
    "threshold = np.percentile(scores_pred, 100 * outliers_fraction)\n",
    "\n",
    "Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) * -1\n",
    "Z = Z.reshape(xx.shape)\n",
    "\n",
    "plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), threshold, 7),cmap=plt.cm.Blues_r)\n",
    "        \n",
    "a = plt.contour(xx, yy, Z, levels=[threshold],linewidths=2, colors='red')\n",
    "        \n",
    "plt.contourf(xx, yy, Z, levels=[threshold, Z.max()],colors='orange')\n",
    "b = plt.scatter(inliers_sales, inliers_profit, c='white',s=20, edgecolor='k')\n",
    "    \n",
    "c = plt.scatter(outliers_sales, outliers_profit, c='black',s=20, edgecolor='k')\n",
    "       \n",
    "plt.axis('tight')\n",
    "plt.legend([a.collections[0], b,c], ['决策函数', '正常值','异常值'],\n",
    "           prop=matplotlib.font_manager.FontProperties(size=20),loc='lower right')\n",
    "      \n",
    "plt.xlim((0, 1))\n",
    "plt.ylim((0, 1))\n",
    "plt.title('隔离森林')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# KNN(K - Nearest Neighbors)\n",
    "\n",
    "用于离群检测的pyod.models.knn.KNN(https://pyod.readthedocs.io/en/latest/pyod.models.html#module-pyod.models.knn)。 对于数据，它与第k个最近邻居的距离可以被视为异常值。其代码与之前的CBLOF非常相似。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "异常值数量:  91 正常值数量:  9903\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc3de9049e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "outliers_fraction = 0.01\n",
    "xx , yy = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))\n",
    "clf = KNN(contamination=outliers_fraction)\n",
    "clf.fit(X)\n",
    "\n",
    "scores_pred = clf.decision_function(X) * -1\n",
    "        \n",
    "y_pred = clf.predict(X)\n",
    "n_inliers = len(y_pred) - np.count_nonzero(y_pred)\n",
    "n_outliers = np.count_nonzero(y_pred == 1)\n",
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "df1 = df\n",
    "df1['outlier'] = y_pred.tolist()\n",
    "    \n",
    "inliers_sales = np.array(df1['Sales'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "inliers_profit = np.array(df1['Profit'][df1['outlier'] == 0]).reshape(-1,1)\n",
    "    \n",
    "outliers_sales = df1['Sales'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "outliers_profit = df1['Profit'][df1['outlier'] == 1].values.reshape(-1,1)\n",
    "         \n",
    "print('异常值数量: ',n_outliers,'正常值数量: ',n_inliers)\n",
    "        \n",
    "threshold = np.percentile(scores_pred, 100 * outliers_fraction)\n",
    "        \n",
    "Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) * -1\n",
    "Z = Z.reshape(xx.shape)\n",
    "\n",
    "plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), threshold, 7),cmap=plt.cm.Blues_r)\n",
    "        \n",
    "a = plt.contour(xx, yy, Z, levels=[threshold],linewidths=2, colors='red')\n",
    "        \n",
    "plt.contourf(xx, yy, Z, levels=[threshold, Z.max()],colors='orange')\n",
    "b = plt.scatter(inliers_sales, inliers_profit, c='white',s=20, edgecolor='k')\n",
    "    \n",
    "c = plt.scatter(outliers_sales, outliers_profit, c='black',s=20, edgecolor='k')\n",
    "       \n",
    "plt.axis('tight')  \n",
    "   \n",
    "plt.legend([a.collections[0], b,c], ['决策函数', '正常值','异常值'],\n",
    "           prop=matplotlib.font_manager.FontProperties(size=20),loc='lower right')\n",
    "      \n",
    "plt.xlim((0, 1))\n",
    "plt.ylim((0, 1))\n",
    "plt.title('K Nearest Neighbors (KNN)')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述四种算法预测的异常并无太大差异。\n",
    "\n",
    "# 对异常订单的研究 \n",
    "\n",
    "我们要研究一下由我们的模型确定的每个异常值，例如，让我们详细查看由KNN确定的几个异常值订单，并尝试理解是什么导致它们异常。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_excel(\"./data/Superstore.xls\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Row ID                                                        1996\n",
       "Order ID                                            US-2017-147221\n",
       "Order Date                                     2017-12-02 00:00:00\n",
       "Ship Date                                      2017-12-04 00:00:00\n",
       "Ship Mode                                             Second Class\n",
       "Customer ID                                               JS-16030\n",
       "Customer Name                                            Joy Smith\n",
       "Segment                                                   Consumer\n",
       "Country                                              United States\n",
       "City                                                       Houston\n",
       "State                                                        Texas\n",
       "Postal Code                                                  77036\n",
       "Region                                                     Central\n",
       "Product ID                                         OFF-AP-10002534\n",
       "Category                                           Office Supplies\n",
       "Sub-Category                                            Appliances\n",
       "Product Name     3.6 Cubic Foot Counter Height Office Refrigerator\n",
       "Sales                                                       294.62\n",
       "Quantity                                                         5\n",
       "Discount                                                       0.8\n",
       "Profit                                                    -766.012\n",
       "Name: 1995, dtype: object"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1995]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于上面这个订单，客户购买了5种产品，总价格为294.62，利润低于-766，折扣80％。 打八折居然还损失这么多,的确不可思议，看来模型认定它是异常值是合理的。我们再看一个订单:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Row ID                                            9650\n",
       "Order ID                                CA-2016-107104\n",
       "Order Date                         2016-11-26 00:00:00\n",
       "Ship Date                          2016-11-30 00:00:00\n",
       "Ship Mode                               Standard Class\n",
       "Customer ID                                   MS-17365\n",
       "Customer Name                      Maribeth Schnelling\n",
       "Segment                                       Consumer\n",
       "Country                                  United States\n",
       "City                                       Los Angeles\n",
       "State                                       California\n",
       "Postal Code                                      90045\n",
       "Region                                            West\n",
       "Product ID                             FUR-BO-10002213\n",
       "Category                                     Furniture\n",
       "Sub-Category                                 Bookcases\n",
       "Product Name     DMI Eclipse Executive Suite Bookcases\n",
       "Sales                                          3406.66\n",
       "Quantity                                             8\n",
       "Discount                                          0.15\n",
       "Profit                                         160.314\n",
       "Name: 9649, dtype: object"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[9649]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于上面这个订单,客户购买了8件商品,总金额为3406.66，折扣15％，打了一五折利润只有160.314，利润率只有4.7%，一般认为商家的利润率不应该这么低,卖100块钱的货只赚4.7元，这有点不可思议，所以我们的模型也发现了这点，将其认定为异常订单看来是合理的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Row ID                                                 9271\n",
       "Order ID                                     US-2017-102183\n",
       "Order Date                              2017-08-21 00:00:00\n",
       "Ship Date                               2017-08-28 00:00:00\n",
       "Ship Mode                                    Standard Class\n",
       "Customer ID                                        PK-19075\n",
       "Customer Name                                     Pete Kriz\n",
       "Segment                                            Consumer\n",
       "Country                                       United States\n",
       "City                                          New York City\n",
       "State                                              New York\n",
       "Postal Code                                           10035\n",
       "Region                                                 East\n",
       "Product ID                                  OFF-BI-10001359\n",
       "Category                                    Office Supplies\n",
       "Sub-Category                                        Binders\n",
       "Product Name     GBC DocuBind TL300 Electric Binding System\n",
       "Sales                                               4305.55\n",
       "Quantity                                                  6\n",
       "Discount                                                0.2\n",
       "Profit                                              1453.12\n",
       "Name: 9270, dtype: object"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[9270]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于上面这个订单，客户以总价4305购买了6件产品，经过20％的折扣后，我们仍然获得了超过33％的利润。这也非常的不可思议，模型将其认定为异常订单看来也是合理的。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
